Android Kotlin RecyclerView - 리사이클러뷰(가로, 세로)
Notepad96
·2021. 10. 24. 05:59
300x250
1. 결과
2. activity_main.xml (메인 레이아웃)
<?xml version="1.0" encoding="utf-8"?>
<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/recyclerVertical"
android:layout_width="match_parent"
android:layout_height="300dp"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerHorizon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
# 1번 째 리사이클러 뷰는 Vertical(세로) 방향의 리사이클러 뷰
# 2번 째 리사이클러 뷰는 Horizontal(가로) 방향의 리사이클러 뷰
3. Vertical RecyclerView (세로 리사이클러뷰)
3-1. list_item_vert.xml (세로 아이템 레이아웃)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="3dp">
<View
android:layout_width="10dp"
android:layout_height="match_parent"
android:background="@color/cardview_dark_background"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="10dp"
android:paddingVertical="5dp"
android:orientation="vertical">
<TextView
android:id="@+id/textTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title 1"
android:textSize="18sp"
android:textStyle="bold"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/cardview_dark_background"/>
<TextView
android:id="@+id/textContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Content 1"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
3-2. ListAdapterVertical.kt (세로 리사이클러뷰 어댑터)
package com.example.recyclerview01
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.list_item_vert.view.*
class ListAdapterVertical: RecyclerView.Adapter<ListAdapterVertical.ListAdapter>(){
var titles = arrayListOf("Title 1", "Title 2", "Title 3", "Title 4", "Title 5", "Title 6", "Title 7", "Title 8")
var contents = arrayListOf("Content 1", "Content 2", "Content 3", "Content 4", "Content 5", "Content 6", "Content 7", "Content 8")
class ListAdapter(val layout: View): RecyclerView.ViewHolder(layout)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListAdapter {
return ListAdapter(LayoutInflater.from(parent.context).inflate(R.layout.list_item_vert, parent, false))
}
override fun onBindViewHolder(holder: ListAdapter, position: Int) {
holder.layout.textTitle.text = titles[position]
holder.layout.textContent.text = contents[position]
}
override fun getItemCount(): Int {
return contents.size
}
}
# Test 용으로 사용할 titles, contents를 선언하여서 사용한다. 이러한 리스트 값들은 어댑터를 선언할 때 파라미터로 받을 수도 있다.
# RecyclerView.ViewHolder를 상속 받는 ListAdapter를 내부의 선언하여 사용한다.
4. Horizontal RecyclerView (가로 리사이클러뷰)
4-1. list_item_hori.xml (가로 아이템 레이아웃)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="2dp"
android:orientation="vertical">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@color/cardview_dark_background"
android:src="@drawable/ic_launcher_foreground"/>
<TextView
android:id="@+id/textImg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Test 1"
android:textSize="18sp"
android:background="@color/cardview_dark_background"
android:textColor="@color/white"
android:gravity="center"/>
</LinearLayout>
4-2. ListAdapterHorizontal.kt (가로 리사이클러뷰 어댑터)
package com.example.recyclerview01
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.list_item_hori.view.*
class ListAdapterHorizontal(var list: ArrayList<String>): RecyclerView.Adapter<ListAdapterHorizontal.ListAdapter>(){
class ListAdapter(val layout: View): RecyclerView.ViewHolder(layout)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListAdapter {
return ListAdapter(LayoutInflater.from(parent.context).inflate(R.layout.list_item_hori, parent, false))
}
override fun onBindViewHolder(holder: ListAdapter, position: Int) {
holder.layout.textImg.text = list[position]
}
override fun getItemCount(): Int {
return list.size
}
}
# 세로 리사이클러뷰와 다르게 ArrayList<String> 타입의 list를 파라미터로 받아서 사용한다.
5. MainActivity.kt
package com.example.recyclerview01
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var manager01 = LinearLayoutManager(this)
var adapter01 = ListAdapterVertical()
var RecyclerView01 = recyclerVertical.apply {
adapter = adapter01
layoutManager = manager01
}
var list = arrayListOf("Test 1", "Test 2", "Test 3", "Test 4")
var manager02 = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
var adapter02 = ListAdapterHorizontal(list)
var RecyclerView02 = recyclerHorizon.apply {
adapter = adapter02
layoutManager = manager02
}
}
}
# Manager와 새로 선언한 Adapter를 recyclerview의 적용시켜 준다.
# Manager를 선언할 때 LinearLayoutManager()를 사용하며, 가로형 리사이클러뷰를 만들고자 하면
LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
처럼 2, 3번 째의 파라미터를 주면 된다.
6. 전체 코드
300x250
'Android' 카테고리의 다른 글
Android Kotlin RecyclerView Header/Footer - 리사이클러뷰(상하단 레이아웃) (0) | 2021.10.25 |
---|---|
Android Kotlin RecyclerView Grid - 리사이클러뷰(격자형, 표 형식) (0) | 2021.10.25 |
Android Kotlin BottomSheetBehavior - 하단 시트 띄우기 (0) | 2021.10.10 |
Android Kotlin BottomSheetDialog - 아래 팝업 레이아웃 (0) | 2021.10.09 |
Android Kotlin Click Event (0) | 2021.10.07 |