Middle
ԻտեմԴեկորացիան ինչ է և ինչպես է այն օգտագործվում Android-ում։
sobes.tech AI
Պատասխան AI-ից
ItemDecoration-ը օգտագործվում է դեկորացիաների նկարելու համար RecyclerView-ի առանձին տարրերի շուրջ կամ ամբողջ RecyclerView-ի վրա:
Հիմնական գործառույթները՝
- Նկարել բաժանարար գծեր կամ տարածքներ տարրերի միջև:
- Նկարել ֆոններ կամ շրջանակներ տարրերի համար:
- Ավելացնել տարածքներ (padding) տարրերի շուրջ առանց նրանց դասավորության փոփոխության:
Ինչպես օգտագործել՝
- Ստեղծել
RecyclerView.ItemDecoration-ից ժառանգող դաս: - Պատմել անհրաժեշտ մեթոդները՝
onDraw(Canvas c, RecyclerView parent, RecyclerView.State state)՝ նկարելու համար ստորից տարրերը:onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)՝ նկարելու համար վերևից տարրերը:getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)՝ ավելացնել տարածքներ տարրերի սահմանների շուրջ:
- Ստեղծել
ItemDecorationդասի օրինակ: - Ավելացնել այն
RecyclerView-ին՝addItemDecoration(ItemDecoration decoration)-ի միջոցով:
Օրինակ՝ getItemOffsets-ի օգտագործում տարածք ավելացնելու համար:
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 // Տարածք վերև միայն առաջին տարրին
}
left = spaceHeight
right = spaceHeight
bottom = spaceHeight
}
}
}
// Կոդում, որտեղ կարգավորում եք RecyclerView:
// val recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view)
// recyclerView.addItemDecoration(SpaceItemDecoration(resources.getDimensionPixelSize(R.dimen.item_space)))
Օրինակ՝ onDraw-ի օգտագործում բաժանարար նկարելու համար:
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) { // մինչև երկրորդ վերջին տարրը
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) {
// Ավելացնել տարածք բաժանարարի համար, եթե դա վերջին տարրն է
if (parent.getChildAdapterPosition(view) != parent.adapter?.itemCount?.minus(1)) {
outRect.bottom = dividerHeight
}
}
}
// Կոդում, որտեղ կարգավորում եք 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)))
Կարևոր է հասկանալ, որ ItemDecoration չի փոխում տարրերի չափերը կամ դիրքը, այն միայն ազդում է դրանց նկարագրման և տարածքների վրա։