Middle
ItemDecoration nima va Androidda qanday ishlatiladi?
sobes.tech AI
AIdan javob
ItemDecoration RecyclerView ich individual elementlari atrofida yoki butun RecyclerView kanvasiga dekoratsiyalarni chizish uchun ishlatiladi.
Asosiy funksiyalar:
- Elementlar orasidagi ajratuvchilarni (chiziqlar, bo'shliqlar) chizish.
- Elementlar uchun fonlar yoki ramkalar chizish.
- Elementlar atrofida bo'shliqlar (padding) qo'shish ularning o'lcham parametrlarini o'zgartirmasdan.
Qanday ishlatish:
RecyclerView.ItemDecorationdan meros olgan sinf yarating.- Kerakli metodlarni qayta yozing:
onDraw(Canvas c, RecyclerView parent, RecyclerView.State state)— elementlarning ostida dekoratsiyalarni chizish uchun.onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)— elementlarning yuqorisida dekoratsiyalarni chizish uchun.getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)— element chetlariga bo'shliqlar qo'shish uchun.
ItemDecorationsinfidan nusxa yarating.- Uni
addItemDecoration(ItemDecoration decoration)yordamidaRecyclerViewga qo'shing.
getItemOffsets yordamida bo'shliq qo'shish misoli:
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 // faqat birinchi element uchun yuqori bo'shliq
}
left = spaceHeight
right = spaceHeight
bottom = spaceHeight
}
}
}
// RecyclerView sozlanayotgan kodda:
// val recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view)
// recyclerView.addItemDecoration(SpaceItemDecoration(resources.getDimensionPixelSize(R.dimen.item_space)))
onDraw yordamida ajratuvchi chizish misoli:
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) { // ikkinchi oxirgi elementgacha iteratsiya
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) {
// oxirgi element bo'lmagan joyga bo'shliq qo'shish
if (parent.getChildAdapterPosition(view) != parent.adapter?.itemCount?.minus(1)) {
outRect.bottom = dividerHeight
}
}
}
// RecyclerView sozlanayotgan kodda:
// 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)))
Muhim: ItemDecoration elementlarning o'lchamlarini yoki joylashuvini o'zgartirmaydi, faqat ularning chizilishi va bo'shliqlariga ta'sir qiladi.