ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] 뷰 바인딩
    카테고리 없음 2024. 4. 5. 09:54

    기존 findViewById를 사용했었지만 뷰 바인딩으로 xml의 id를 코드에서 직접 참조할 수 있게 되었다.
    뷰 바인딩을 사용하려면 build.gradle.kts에서 아래 설정을 활성화 해주어야 한다.

    android {
        viewBinding {
            enable = true
        }
    }

     

    사용법

    뷰 바인딩으로 xml의 id를 참조할 시 카멜 케이스로 자동으로 바뀌며 참조할 수 있게 되었다.

    또한 뷰 바인딩 사용 시 setContentView를 binding.root로 해줘야 한다.

    (기존 방식으로 id로 setContentView를 했다고 가정하고 바인딩으로 내부 스타일을 바꾼 경우 화면에서 바뀌지 않는다.)

    <!-- activity_main.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">
    
        <TextView
            android:id="@+id/test_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="TextView" />
    </LinearLayout>
    // 기존 방식
    class MainActivity : AppCompatActivity() {
    
        private lateinit var textView: TextView
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            textView = findViewById(R.id.test_text_view)
        }
    }
    // 뷰 바인딩
    class MainActivity : AppCompatActivity() {
    
        // xml인 activity_main이 ActivityMainBinding(파스칼케이스)로 바뀌어서 참조할 수 있게 된다.
        // 만약 activity_main_23이면 ActivityMain23Binding으로 참조가 가능할 것이다.
        private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
    
        private lateinit var textView: TextView
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(binding.root) // 꼭 binding.root로 설정해주어야 한다.
            textView = binding.textTextView // xml의 id를 카멜케이스로 참조가 가능해진다.
        }
    }

     

Designed by Tistory.