ViewBinding은 레이아웃 XML 파일에 선언된 뷰 객체를 코드에서 쉽게 이용할 수 있도록 한다.
레이아웃 XML 파일에 선언된 뷰 객체를 코드에서 이용하기 위해서
뷰의 식별자나 ID 속성을 등록한 후에 코드에서 findViewById( ) 함수로 뷰 객체를 획득해 주어야 한다.
그런데 실제로 앱을 개발해보면, 하나의 XML에 수십 개의 뷰가 선언된다.
따라서 코드에 수십줄의 findViewById( ) 함수가 작성되어야 한다.
이는 상당히 귀찮은 작업이다.
ViewBinding을 사용하여 이용할 레이아웃 XML 파일이 아래와 같이 선언되어 있다고 가정해 보자.
activity_man.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">
<Button
android:id="@+id/visibleBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="visible"
/>
<Button
android:id="@+id/targetView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello_world"
android:backgroundTint="#FF0000"
android:textColor="#FFFFFF"
android:padding="16dp"
android:visibility="invisible"
/>
<Button
android:id="@+id/invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="invisible"
/>
</LinearLayout>
이후 ViewBindg을 사용한다는 선언을 모듈 수준의 build.gradle 파일에 해주어야 한다.
#1. ViewBinding 설정 선언하기
build.gradle
plugins {
id 'com.android.application'
}
android {
~~ 이 하 생 략 ~~
buildFeatures {
viewBinding = true
}
}
dependencies {
~~ 이 하 생 략 ~~
}
위와같이 build.gradle에 viewBinding = ture 설정을 추가하였다면
Sync Now를 클릭하여 Gradle에 변경된 설정을 반영한다.
모듈 수준의 build.gradle 파일에 위의 내용을 선언하는 것만으로 ViewBinding 기법을 이용하기 위한 모든 설정이 끝나게 된다.
이렇게 하면, 빌더에 의해 레이아웃 XML 파일에 선언한 뷰 객체를 가지는 클래스가 자동으로 만들어지게 된다.
이 클래스의 이름은 레이아웃 XML 파일명이 변형되어 붙여진다.
■ 단어의 첫 글자가 대문자로 바뀌고 밑줄(_)은 제거된다.
■ "binding"이라는 문자가 추가된 상태로 클래스 명이 지정된다.
레이아웃 XML 파일명과 ViewBinding 기법에 의해 자동으로 만들어지는 클래스명의 예는 아래와 같다.
activity_main.xml | → | ActivityMainBinding |
item_main.xml | → | ItemMainBinding |
text.xml | → | TextBinding |
이제 자동으로 만들어진 Binding 클래스를 코드에서 이용하기만 하면 된다.
애라의 코드는 activity_main.xml 파일을 이용하는 Activity 내의 코드이다.
MainActivity.java
package com.example.viewbinding;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.example.viewbinding2.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 뷰 바인딩 객체 획득
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
// 액티비티 화면 출력
setContentView(binding.getRoot());
// 뷰 객체 이용
binding.visibleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// targetView 숨기기
binding.targetView.setVisibility(View.VISIBLE);
}
});
binding.invisible.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// targetView 나타내기
binding.targetView.setVisibility(View.INVISIBLE);
}
});
}
}
코드를 보면 뷰 객체를 선언하지도 않고 findViewById( ) 함수로 획득하지도 않았음에도
레이아웃 XML에 선언된 뷰를 이용하고 있다.
자동으로 만들어진 ActiviyMainBinding 클래스 내에 이미 이용하고자 하는 뷰 객체가 선언되어 있고,
획득되어 있어서 코드에서는 뷰를 이용만 하면 된다.
ActiviyMainBinding에 선언된 뷰 객체의 이름은 레이아웃 XML에 등록된 id 속성값으로 지정된다.
Button 뷰의 id 속성값이 <Button android:id="@+id/visibleBtn"/>으로 선언되었기 때문에,
코드에서 binding.지정한_id( 예 : visibleBtn )명 으로 해당 뷰를 사용할 수 있다.
#2. 출력결과
'Android > Setting' 카테고리의 다른 글
[IntelliJ] Classpath 설정 변경 (0) | 2024.09.09 |
---|---|
[Android] Git Clone 하기 (0) | 2023.07.05 |
[Android] 기본 제공 ICON 사용방법(벡터 그래픽) (0) | 2022.07.19 |
[Android] 프로젝트에 신규 모듈 추가하여 관리하기 (0) | 2022.07.14 |
[Android] 프로젝트 만들기 (0) | 2021.10.26 |