728x90


📌  TextView 란?

  • 사용자에게 전달하고자 하는 문자열을 표시하는 View이다.

 

 

View 객체의 주소 값 가져오기

  • Kotlin 코드에서 동적으로 View를 제어하기 위해서는 View 객체의 주소 값을 얻어와야 한다.

xml 코드

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

위 xml 코드에서 TextView의 주소 값 즉 id는 textView이다.

 

이를 코틀린 코드에서 동적으로 제어하기 위해서는 findViewById와 뷰 바인딩을 사용할 수 있다.

 

 

 

findViewById

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val text1 = findViewById<TextView>(R.id.textView1)
        text1.text = "하이"

 

 

 

View Binding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)


        binding.button1.text = "하이"

 

findViewById 와 View Binding의 차이에 대해서는 이전 포스팅에서 관련 글을 작성했다.

https://jminie.tistory.com/141

 

안드로이드 [Kotlin] - 뷰 바인딩 (View Binding)

📌 왜 View Binding? Kotlin의 장점 중 하나는 findViewById를 쓰지 않아도 되는 점이다. kotlin extension으로 바로 접근이 가능했다. 그러나 코틀린 익스텐션이 deprecated 되었다. https://developer.android...

jminie.tistory.com

 

TextView의 기본 주요 속성

  • text : 보여줄 문자열
  • lines : 문자열의 라인수
  • textColor : 표시되는 문자열 색상
  • textSize : 표시되는 문자열 크기
  • textAppearance : 표시되는 문자열 형식

 

 

 

 

 


 

 

 

 

📌  Button 이란?

  • 사용자가 클릭하면 개발자가 만든 코드를 동작시켜 주는 View
  • Button은 문자열을 표시하는 Button과 이미지를 표시하는 ImageButton 이 있다.

 

 

Button의 주요 속성

  • text : Button의 문자열을 설정한다.
  • srcCompat : ImageButton의 이미지를 설정한다.

xml 코드

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="버튼 1번" />

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@mipmap/ic_launcher" />

 

 

 

 

 

 

Kotlin 기반 안드로이드에서의 이벤트 처리

  • Kotlin 기반 안드로이드에서 이벤트 처리는 자바 기반 프로젝트와 동일하다.
  • 이벤트와 관련된 클래스를 구현하고 객체를 생성한 다음 메서드를 통해 View에 설정하면 된다.
  • 하지만 코틀린에서는 추가적으로 이벤트와 관련된 메서드 대부분은 고차 함수로도 제공이 된다.

정리하자면 여러 View에 대한 처리를 동시에 할 경우에는 Listener를 사용하고 각각 따로 처리할 때는 고차 함수를 이용하면 편하다.

 

Kotlin MainActivity 코드

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.example.viewbasic.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)


        binding.button1.text = "하이"
        binding.button2.setBackgroundColor(Color.BLACK)

        // 버튼에 리스너를 설정한다.
        binding.button1.setOnClickListener(listener1)
        binding.imageButton1.setOnClickListener(listener2)
        binding.button2.setOnClickListener(listener3)
        binding.button3.setOnClickListener(listener3)
        binding.button4.setOnClickListener {
            binding.textView1.text = "다섯 번재 버튼을 눌렀습니다." // 코틀린은 리스너를 설정하는 방법을 고차함수로도 제공한다.
        }
    }

    // 버튼을 클릭하면 동작하는 리스터 객체
    val listener1 = View.OnClickListener {
        binding.textView1.text = "첫 번째 버튼을 눌렀습니다."
    }

    val listener2 = View.OnClickListener {
        binding.textView1.text = "두 번째 버튼을 눌렀습니다."
    }

    // 여러 뷰들을 하나의 리스너에서 처리 하겠다 하면 View.OnClickListener 방식으로 하는 것이 좋다.
    val listener3 = View.OnClickListener {
        when (it.id) { // 사건이 발생한 객체의 주소값이 it 으로 들어옴
            binding.button2.id -> binding.textView1.text = "세 번째 버튼을 눌렀습니다."
            binding.button3.id -> binding.textView1.text = "네 번째 버튼을 눌렀습니다."
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

복사했습니다!