본문 바로가기

Android (by kotlin)

[코틀린] Kotlin Android Extensions 사용하기 (findViewById)

★ 중요: 2021년 중으로 코틀린 안드로이드 익스텐션 플러그인 지원이 중단될 예정이며, 이 시점 이후부터는 익스텐션을 더이상 사용할 수 없습니다.

 

    개요

안드로이드앱 개발을 Kotlin으로 넘어오면서 가장 편리했던 기능은 바로 Kotlin Android Extensions 줄여서 KTX 라는 우리에겐 친숙한 이름의 라이브러리 입니다 :)

(※ Android KTX : 2018년 2월 구글에서 Android를 위한 Kotlin 개발용 확장 라이브러리로 발표하였습니다. )

 

여러 가지 편리한 요소들이 있고, 자세한 내용은 아래의 링크를 참조하길 바랍니다.

https://developers-kr.googleblog.com/2018/02/introducing-android-ktx-even-sweeter-kotlin-development-for-android.html

 

본 포스트에서 다루는 것은 기존 안드로이드 개발시 XML 뷰컴포넌트를 다루기 위해서

매번 귀찮게 선언한 findViewById()이나 ButterKnife 라이브러리를 더 이상 사용하지 않고

Kotlin에서 공식적으로 지원하는 KTX를 이용하여 간단한 뷰컴포넌트를 다루는 방법을 정리 하였습니다.

 

    환경

- android_studio v3.6.3

- kotlin v1.3.72

- gradle v5.6.4

 

    사용법

최신 버전 기준으로 KTX라이브러리는 기본 내장되어 있기 때문에 별도의 선언없이 간편하게 사용가능 합니다. 

아래의 예제는 안드로이드 스튜디오에서 기본 Empty 프로젝트 생성하고

Hello World!! TextView의 내용을 버튼 클릭시 원하는 내용으로 바꾸는 예제입니다.

1. Empty NEW 프로젝트 생성

2. Button 컴포넌트 추가

3. Button 클릭시 'Kotlin Android Extensions'라고 TextView 내용를 변경하고 글자색을 Red로 변경

 

[ activity_main.xml ]

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
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"
    tools:context=".MainActivity">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:id="@+id/TextSample1"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="Hello World!"
            android:gravity="center"
            android:textSize="20dp" />
        <Button
            android:id="@+id/ButtonSample1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="버튼1" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

 

[ MainActivity.kt ]

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
 
class MainActivity : AppCompatActivity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        ButtonSample1.setOnClickListener {
            TextSample1.setTextColor(Color.RED)
            TextSample1.setText("Kotlin Android Extensions")
        }
    }
}

 

정말 간단합니다...이것때문에 Java에서 짐싸서 Kotlin으로 이사왔다해도 과언이 아니네요..ㅎㅎ

위에 보시면 import 한줄로 XML의 고유ID 이름으로 직접 호출 사용 가능합니다. 

 

import kotlinx.android.synthetic.{sourceSetName}.{layoutName}.*

                                   ▼

import kotlinx.android.synthetic.main.activity_main.* 

 

main은 소스셋 애플리케이션의 소스셋 이름, activity_main은 레이아웃 XML 이름입니다.

사용하고자하는 XML의 이름을 위와 같이 import하고

컴포넌트의 고유 이름(ButtonSample1. TextSample1)으로 속성을 제어하거나,

이벤트 리스너를 선언하여 사용 가능합니다.

물론 이름이 중복되어선 안되겠죠?

 

감사합니다.

 

[ 기본 실행 ]
[ 버튼 클릭 ]