pref: 优化首页吧列表多列时最后一行样式

This commit is contained in:
HuanCheng65 2022-08-05 20:00:07 +08:00
parent 54bd414e52
commit a2ac37eacd
No known key found for this signature in database
GPG Key ID: E9031EF91A805148
3 changed files with 45 additions and 18 deletions

View File

@ -1,6 +1,8 @@
package com.huanchengfly.tieba.post.adapters package com.huanchengfly.tieba.post.adapters
import android.content.Context import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
import android.view.View import android.view.View
import com.alibaba.android.vlayout.layout.GridLayoutHelper import com.alibaba.android.vlayout.layout.GridLayoutHelper
import com.huanchengfly.tieba.post.R import com.huanchengfly.tieba.post.R
@ -15,7 +17,7 @@ class MainForumListAdapter(
context: Context, context: Context,
span: Int = 1 span: Int = 1
) : BaseMultiTypeDelegateAdapter<ForumRecommend.LikeForum>( ) : BaseMultiTypeDelegateAdapter<ForumRecommend.LikeForum>(
context, GridLayoutHelper(span) context, GridLayoutHelper(span).apply { setAutoExpand(false) }
) { ) {
companion object { companion object {
const val TYPE_LIST = 1 const val TYPE_LIST = 1
@ -39,11 +41,16 @@ class MainForumListAdapter(
viewType: Int viewType: Int
) { ) {
val cardRadius = context.resources.getDimension(R.dimen.card_radius) val cardRadius = context.resources.getDimension(R.dimen.card_radius)
val rippleColor = if (item.isFake) Color.TRANSPARENT else Util.getColorByAttr(
context,
R.attr.colorControlHighlight,
R.color.transparent
)
when { when {
//单列 //单列
spanCount == 1 -> { spanCount == 1 -> {
viewHolder.itemView.background = wrapRipple( viewHolder.itemView.background = wrapRipple(
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent), rippleColor,
if (position == getCount() - 1) { if (position == getCount() - 1) {
getRadiusDrawable(bottomLeftPx = cardRadius, bottomRightPx = cardRadius) getRadiusDrawable(bottomLeftPx = cardRadius, bottomRightPx = cardRadius)
} else { } else {
@ -53,10 +60,7 @@ class MainForumListAdapter(
if (context.appPreferences.listItemsBackgroundIntermixed) { if (context.appPreferences.listItemsBackgroundIntermixed) {
if (position % 2 == 1) { if (position % 2 == 1) {
viewHolder.itemView.backgroundTintList = viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList( ColorStateList.valueOf(Color.TRANSPARENT)
context,
R.color.default_color_card
)
} else { } else {
viewHolder.itemView.backgroundTintList = viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList( ColorStateListUtils.createColorStateList(
@ -66,18 +70,15 @@ class MainForumListAdapter(
} }
} else { } else {
viewHolder.itemView.backgroundTintList = viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList( ColorStateList.valueOf(Color.TRANSPARENT)
context,
R.color.default_color_card
)
} }
} }
//多列第一个 //多列第一个
position % spanCount == 0 -> { position % spanCount == 0 -> {
viewHolder.itemView.backgroundTintList = viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(context, R.color.default_color_card) ColorStateList.valueOf(Color.TRANSPARENT)
viewHolder.itemView.background = wrapRipple( viewHolder.itemView.background = wrapRipple(
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent), rippleColor,
when (position) { when (position) {
//最后一行,左 //最后一行,左
getCount() - spanCount -> getRadiusDrawable(bottomLeftPx = cardRadius) getCount() - spanCount -> getRadiusDrawable(bottomLeftPx = cardRadius)
@ -94,9 +95,9 @@ class MainForumListAdapter(
//多列右 //多列右
else -> { else -> {
viewHolder.itemView.backgroundTintList = viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(context, R.color.default_color_card) ColorStateList.valueOf(Color.TRANSPARENT)
viewHolder.itemView.background = wrapRipple( viewHolder.itemView.background = wrapRipple(
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent), rippleColor,
if (position == getCount() - 1) { if (position == getCount() - 1) {
getRadiusDrawable(bottomRightPx = cardRadius) getRadiusDrawable(bottomRightPx = cardRadius)
} else { } else {
@ -105,6 +106,15 @@ class MainForumListAdapter(
) )
} }
} }
if (viewType == TYPE_GRID) {
val visibility = if (item.isFake) View.INVISIBLE else View.VISIBLE
listOf(
R.id.forum_list_item_status,
R.id.forum_list_item_name
).forEach {
viewHolder.setVisibility(it, visibility)
}
}
if (spanCount > 1) { if (spanCount > 1) {
ImageUtil.clear(viewHolder.getView(R.id.forum_list_item_avatar)) ImageUtil.clear(viewHolder.getView(R.id.forum_list_item_avatar))
} else { } else {

View File

@ -20,6 +20,8 @@ data class ForumRecommend(
var levelId: String, var levelId: String,
@SerializedName("is_sign") @SerializedName("is_sign")
var isSign: String, var isSign: String,
var avatar: String var avatar: String,
@Transient
var isFake: Boolean = false
) )
} }

View File

@ -83,6 +83,8 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
private lateinit var mainForumListAdapter: MainForumListAdapter private lateinit var mainForumListAdapter: MainForumListAdapter
private lateinit var topForumListAdapter: MainForumListAdapter private lateinit var topForumListAdapter: MainForumListAdapter
var listSingle: Boolean = false
fun reset() { fun reset() {
if (isFragmentVisible) { if (isFragmentVisible) {
mRefreshView.autoRefresh() mRefreshView.autoRefresh()
@ -120,11 +122,12 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
virtualLayoutManager = VirtualLayoutManager(attachContext) virtualLayoutManager = VirtualLayoutManager(attachContext)
delegateAdapter = DelegateAdapter(virtualLayoutManager) delegateAdapter = DelegateAdapter(virtualLayoutManager)
listSingle = appPreferences.listSingle
} }
private val spanCount: Int private val spanCount: Int
get() = when { get() = when {
appPreferences.listSingle -> { listSingle -> {
1 1
} }
attachContext.isTablet -> { attachContext.isTablet -> {
@ -282,7 +285,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
) { ) {
mData = response.body() mData = response.body()
if (mData != null) { if (mData != null) {
mainForumListAdapter.setData(mData!!.likeForum) mainForumListAdapter.setData(mData!!.likeForum.addFakeItems(spanCount))
mRefreshView.finishRefresh(false) mRefreshView.finishRefresh(false)
} else { } else {
Toast.makeText(attachContext, R.string.error_unknown, Toast.LENGTH_SHORT) Toast.makeText(attachContext, R.string.error_unknown, Toast.LENGTH_SHORT)
@ -294,6 +297,15 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
}) })
} }
private fun List<ForumRecommend.LikeForum>.addFakeItems(divisor: Int): List<ForumRecommend.LikeForum> {
val fakeItemCount = divisor - (size % divisor)
return toMutableList().apply {
repeat(fakeItemCount) {
add(ForumRecommend.LikeForum("", "", "1", "0", "", isFake = true))
}
}
}
override fun onRefresh() { override fun onRefresh() {
if (isFragmentVisible) { if (isFragmentVisible) {
mRefreshView.autoRefresh() mRefreshView.autoRefresh()
@ -310,7 +322,8 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
true true
} }
R.id.menu_switch_list -> { R.id.menu_switch_list -> {
appPreferences.listSingle = !appPreferences.listSingle listSingle = !listSingle
appPreferences.listSingle = listSingle
reloadAdapters() reloadAdapters()
true true
} }
@ -319,6 +332,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
} }
override fun onClick(viewHolder: MyViewHolder, item: ForumRecommend.LikeForum, position: Int) { override fun onClick(viewHolder: MyViewHolder, item: ForumRecommend.LikeForum, position: Int) {
if (item.isFake) return
PreloadUtil.startActivityWithPreload( PreloadUtil.startActivityWithPreload(
attachContext, attachContext,
Intent( Intent(
@ -334,6 +348,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
item: ForumRecommend.LikeForum, item: ForumRecommend.LikeForum,
position: Int position: Int
): Boolean { ): Boolean {
if (item.isFake) return false
val popupMenu = PopupUtil.create(viewHolder.itemView).apply { val popupMenu = PopupUtil.create(viewHolder.itemView).apply {
menuInflater.inflate(R.menu.menu_forum_long_click, menu) menuInflater.inflate(R.menu.menu_forum_long_click, menu)
} }