Middle
Kas ir ItemDecoration un kā tas tiek izmantots Android?
sobes.tech AI
Atbilde no AI
ItemDecoration tiek izmantots, lai zīmētu dekorācijas ap atsevišķiem RecyclerView elementiem vai virs visa RecyclerView auduma.
Galvenās funkcijas:
- Zīmēt starpsienas starp elementiem (līnijas, atstarpes).
- Zīmēt fonus vai rāmjus elementiem.
- Pievienot atstarpes (padding) ap elementiem ne mainot paša elementa izkārtojuma parametrus.
Kā lietot:
- Izveidojiet klasi, kas manto
RecyclerView.ItemDecoration. - Pārrakstiet nepieciešamās metodes:
onDraw(Canvas c, RecyclerView parent, RecyclerView.State state): dekorāciju zīmēšanai zem elementiem.onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state): dekorāciju zīmēšanai virs elementiem.getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state): atstarpju pievienošanai elementa robežām.
- Izveidojiet
ItemDecorationklases eksemplāru. - Pievienojiet to
RecyclerViewaraddItemDecoration(ItemDecoration decoration).
Piemērs, izmantojot getItemOffsets atstarpes pievienošanai:
class SpaceItemDecoration(private val spaceHeight: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
with(outRect) {
if (parent.getChildAdapterPosition(view) == 0) {
top = spaceHeight // Atstarpe augšpusē tikai pirmajam elementam
}
left = spaceHeight
right = spaceHeight
bottom = spaceHeight
}
}
}
// Kodā, kur konfigurējat `RecyclerView`:
// val recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view)
// recyclerView.addItemDecoration(SpaceItemDecoration(resources.getDimensionPixelSize(R.dimen.item_space)))
Piemērs, izmantojot onDraw zīmēšanai starpsienu:
class DividerItemDecoration(private val dividerHeight: Int, private val dividerColor: Int) : RecyclerView.ItemDecoration() {
private val paint = Paint().apply {
color = dividerColor
style = Paint.Style.FILL
}
override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
val left = parent.paddingLeft
val right = parent.width - parent.paddingRight
for (i in 0 until parent.childCount - 1) { // līdz priekšpēdējam elementam
val child = parent.getChildAt(i)
val top = child.bottom
val bottom = top + dividerHeight
canvas.drawRect(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat(), paint)
}
}
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
// Pievienojam vietu starpsienai, ja tas nav pēdējais elements
if (parent.getChildAdapterPosition(view) != parent.adapter?.itemCount?.minus(1)) {
outRect.bottom = dividerHeight
}
}
}
// Kodā, kur konfigurējat `RecyclerView`:
// val recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view)
// recyclerView.addItemDecoration(DividerItemDecoration(resources.getDimensionPixelSize(R.dimen.divider_height), ContextCompat.getColor(this, R.color.divider_color)))
Svarīgi saprast, ka ItemDecoration ne maina elementu izmērus vai izkārtojumu, tas tikai ietekmē to zīmēšanu un atstarpes.