티스토리 뷰

반응형

Intro

RecyclerView를 사용할 때, Divider를 종종 View태그를 사용해 만들어 사용하기도 한다.

Item을 커스텀하여 사용하고, 가변성이 필요하거나 style을 간단하게 입히려면 좋은 방법이다.

만약 단순하게 Divider가 필요한 경우에도 View를 사용해야하는 귀찮음이 있다.

또한 레이아웃이 복잡해 졌을 때, 메모리 관리에도 별로 좋지 않은 방법이라고 생각한다.

 

 

반응형

Summary

오늘은 간단하게 Decorator를 사용해 RecyclerView에 Divider를 넣어주고자 한다.


Using

 

1. 기본 화면 만들기

RecyclerView를 추가하고 Adapter, Item을 만들어 준다.

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

    </LinearLayout>
</layout>

 

item_recyclerview.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/item_textView"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center"
            android:text="TEST" />
    </LinearLayout>
</layout>

 

MyAdapter.kt
class MyAdapter: RecyclerView.Adapter<MyViewHolder>() {
    var datas: List<String> = listOf()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder =
        MyViewHolder(
            LayoutInflater.from(parent.context).inflate(
                R.layout.item_recyclerview,
                parent,
                false
            )
        )


    override fun getItemCount(): Int = datas.size

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.bind(datas[position])
    }
}

open class MyViewHolder(item: View): RecyclerView.ViewHolder(item) {
    val binding: ItemRecyclerviewBinding? = DataBindingUtil.bind(item)

    fun bind(data: String) {
        binding?.itemTextView?.text = data
    }
}

 

 

그리고 간단하게 리스트를 만들어보자.

MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        val adapter = MyAdapter()
        binding.rvMain.adapter = adapter

        adapter.datas = listOf("양파", "감자", "오이")
        adapter.notifyDataSetChanged()
}

 

그러면 아래와 같은 화면이 만들어지게 된다.

 

1. Decorator 추가하기

여기서 Decorator를 추가해 Divider를 넣어주자.

VERTICAL 적용
recyclerView.addItemDecoration(
	DividerItemDecoration(this, VERTICAL)
)

 

 

 

가로 형태의 리스트에도 적용이 가능하다.

아이템의 크기와 RecyclerView 크기를 조정 후 아래의 코드를 적용해본다.

HORIZONTAL 적용
recyclerView.addItemDecoration(
    DividerItemDecoration(this, HORIZONTAL)
)

 

 

 

이런 간단한 방법으로 목록의 가시성을 높일 수 있다.

 

# 전체코드

https://github.com/rlwhd0716/tistory_library/tree/main/Android/RecyclerViewExample

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함