Я создаю вертикальный RecyclerView с тремя столбцами (для упрощения иллюстрации я сделал RecyclerView, содержащий только 6 элементов).То, что мне нужно, это то, что элементы по бокам получают больший запас, поэтому я использую ItemDecoration, чтобы добиться этого:
class SpaceDecoration : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
val position = parent.getChildAdapterPosition(view)
outRect.left = when(position) {
0, 3 -> 160 // Left most two items
else -> 10 // others
}
outRect.right = when(position) {
2, 5 -> 160 // Right most two items
else ->0 // others
}
outRect.top = 10
outRect.bottom = 0
}
}
То, что я хочу, это чтобы тело элемента имело одинаковую ширину.Однако это не так.Похоже, что GridLayoutManager измеряет размер ItemDecoration при равном разделении пространства.Как сделать так, чтобы элементы выглядели равными по ширине?Я, конечно, не хочу, чтобы GridLayoutManager измерял ItemDecoration.
Вот оставшийся код:
MainActivity.kt:
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.grid)
recyclerView.layoutManager = GridLayoutManager(this,3, RecyclerView.VERTICAL, false)
recyclerView.adapter = GridAdapter()
recyclerView.addItemDecoration(SpaceDecoration())
}
}
GridAdapter.kt:
class GridAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder =
VH(LayoutInflater.from(parent.context).inflate(R.layout.grid_item, parent, false))
override fun getItemCount() = 6
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) = Unit
class VH(item: View) : RecyclerView.ViewHolder(item)
}
grid_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="48sp"
android:text="AAA"
android:gravity="center"
android:background="@color/colorAccent"/>