android - Android RecyclerView 水平 GridLayoutManager 与装饰错误?
问题描述
各位大佬在使用水平RecyclerViewItemDecoration的时候遇到了一些问题,我想实现不同的装饰高度但是水平recyclerview的装饰高度总是一样的,图片和代码在下面,我在垂直GridLayoutManger中使用相同的代码是有效的,我看到了源码水平recyclerview有特殊处理的时候要测code,这正常吗?
class MainItemDecoration : RecyclerView.ItemDecoration() {
private val space20 = (Resources.getSystem().displayMetrics.density * 20).toInt()
override fun getItemOffsets(
outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State
) {
val lp = view.layoutParams as GridLayoutManager.LayoutParams
outRect.left = space20
outRect.right = space20
when (lp.spanIndex) {
0 -> {
outRect.bottom = 0
}
1 -> {
outRect.bottom = space20
}
2 -> {
outRect.bottom = space20 * 2
}
}
}
}
- - - 主要活动 - -
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView: RecyclerView = findViewById(R.id.recycler_view)
recyclerView.apply {
layoutManager = GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false)
adapter = MainAdapter()
addItemDecoration(MainItemDecoration())
}
}
}
--- xml-------
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_red_light"
tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/item_main"
tools:orientation="horizontal"
tools:spanCount="3" />
</FrameLayout>
- - 物品 - -
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:background="@android:color/holo_blue_light"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="16sp"
tools:text="123" />
</FrameLayout>
解决方案
推荐阅读
- java - maven central 是否希望共享源 URL?
- json - 为什么它在运行时说我的 json 字段为空?
- reactjs - 为全球商店做出反应,在当今 Redux 或 Context-api 中哪个更好用?
- javascript - 我该如何解决这个 CSS 对象匹配问题?
- bash - Bash string substitution with %
- sql-server - Azure 数据工厂管道 - 从本地 SQL Server 和 Dynamics CRM 复制数据
- powershell - Powershell 使用 Get-ADPrincipleGroup 引发错误
- css - 生成css的SASS函数
- c# - 在 C# Parallel.ForEach 中的线程上保持变量
- linux - 如何删除 Linux 中所有目录文件的内容?