Archives
Recent Posts
«   2024/10   »
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 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[42일차 Android] XML을 이용한 View 객체 생성 본문

Computer/Android

[42일차 Android] XML을 이용한 View 객체 생성

Wise-99 2023. 7. 6. 19:00

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 XML을 이용한 View 객체 생성

Layout Inflater

  • 지금까지 예제는 layout 폴더에 있는 xml 파일을 통해 화면을 구성하였다.
  • 이는 Activity가 처음 나타날 때의 모습을 설정하게 된다.
  • 만약 실행 중 View를 만들어 추가할 경우에는 코드를 통해 View를 만들어 추가해줘야 한다.
  • LayoutInflater를 사용하면 xml로 만든 화면 모양을 View 객체로 만들어 사용할 수 있다.

 

 

 

예제 코드

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:id="@+id/mainContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" />

 

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding
    lateinit var layoutSub3Binding: LayoutSub3Binding
    lateinit var layoutSub4Binding: LayoutSub4Binding
    lateinit var layoutSub1Binding: LayoutSub1Binding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        // LayoutInflater로 View 생성
        val sub1 = layoutInflater.inflate(R.layout.layout_sub1, null)
        val sub2 = layoutInflater.inflate(R.layout.layout_sub2, null)

        // ViewBinding 생성
        layoutSub3Binding = LayoutSub3Binding.inflate(layoutInflater)
        layoutSub4Binding = LayoutSub4Binding.inflate(layoutInflater)

        // 생성한 View들을 레이아웃에 추가
        activityMainBinding.mainContainer.addView(sub1)
        activityMainBinding.mainContainer.addView(sub2)
        activityMainBinding.mainContainer.addView(layoutSub3Binding.root)
        activityMainBinding.mainContainer.addView(layoutSub4Binding.root)

        // View 객체를 ViewBinding 객체에 설정
        // inflate : 새로운 View를 생성
        // bind : 기존에 있는 View를 가지고 설정
        layoutSub1Binding = LayoutSub1Binding.bind(sub1)
        layoutSub1Binding.run {
            buttonSub1.setOnClickListener {
                textViewSub1.text = "sub1 버튼을 눌렀습니다."
            }
        }

        layoutSub3Binding.run{
            buttonSub3.setOnClickListener {
                textViewSub3.text = "sub3 버튼을 눌렀습니다"
            }
        }
    }
}
  • LayoutInflater로 View 생성
    • layoutInflater.inflate()를 이용하여 View를 생성한다.
    • MainActivity에 추가하기 위해 addView()를 사용하여 View를 추가한다.

 

  • ViewBinding 생성
    • ViewBinding을 이용하여 View를 생성한다.
    • MainActivity에 추가하기 위해 addView()를 사용하여 View를 추가한다.
    • root를 이용해 연결된 레이아웃 파일에서 가장 바깥쪽 뷰를 반환받아 추가한다.