안드로이드 공부/ addView 방식

yellow·2021년 6월 1일
0

안드로이드 공부

목록 보기
19/28
post-thumbnail

ListView

  • 유사하게 반복되는 뷰를 그리기 위한 도구

📎 ListView를 그리는 세가지 방법

  1. addView
  2. ListView
  3. RecyclerView

📌 addView

📎 addView 방식

  1. item을 담을 xml을 만든다.
  2. container view에 만든 item을 더해준다.

📎 addView 방식 예제

  • 자동차의 이름과 엔진을 담는 item들의 리스트 만들기

1. Activity에 리스트뷰를 담을 container 생성

  • addView 방식은 자동으로 스크롤이 추가되지 않기 때문에 container view를 ScrollView로 감싸주어야 한다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AddViewActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- ListView를 담을 container -->
        <LinearLayout
            android:id="@+id/addView_container"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </LinearLayout>

    </ScrollView>
</LinearLayout>

2. Item을 담을 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="match_parent"
    android:background="#FFF7B3"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <!-- car의 name을 담는 텍스트뷰 -->
        <TextView
            android:id="@+id/car_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            android:gravity="center" />

        <!-- 구분선 -->
        <TextView
            android:layout_width="3dp"
            android:layout_height="match_parent"
            android:textSize="30dp"
            android:background="#ffffff" />
 
        <!-- car의 engine을 담는 텍스트뷰 -->
        <TextView
            android:id="@+id/car_engine"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textSize="30dp"/>

    </LinearLayout>

    <!-- item들을 구분해주기 위한 구분선 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="3dp"
        android:background="#ffffff"/>
</LinearLayout>

3. Activity에 Car 클래스를 생성해서 Item List 만들기

class Car(val name: String, val engine: String){

}

// 아이템 리스트 준비
val carList = ArrayList<Car>()
carList.add(Car("아반떼","I4"))
carList.add(Car("그랜저","I4"))
carList.add(Car("쏘나타","I4"))
carList.add(Car("GV70","I4, V6"))
carList.add(Car("G90","V6, V8"))

4. Container View에 Item View 그려서 추가하기

val container = findViewById<LinearLayout>(R.id.addView_container)

// inflater 가져오기
val inflater = LayoutInflater.from(this)

for(i in 0 until carList.size){

    // inflater로 item_view.xml 객체화
    val itemView = inflater.inflate(R.layout.item_view, null)
    
    // item view에 내용 추가
    val carNameView = itemView.findViewById<TextView>(R.id.car_name)
    val carEngineView = itemView.findViewById<TextView>(R.id.car_engine)

    carNameView.text = carList[i].name
    carEngineView.text = carList[i].engine

    // 컨테이너에 아이템뷰 추가하기
    container.addView(itemView)
}

결과

profile
할 수 있어! :)

0개의 댓글