💡 Kotlin

[Kotlin] 동적 View 생성

콩드로이드 2021. 6. 13. 19:43

안녕하세요 오랜만의 포스팅입니다 😊

 

실무 중 동적으로 View 생성이 많이 사용되기에, 따로 정리를 해두고자 합니다

예시는 TextView를 사용하겠지만, 다른 View를 생성하는 방식도 비슷한 형식으로 사용됩니다.

 


아래와 같은 UI를 만들어보겠습니다

단순 동적 View 생성만 나타내는 부분이므로 매우 간단합니다 😅

 

 

1. drawable 생성

 

TextView Background를 위해 배경을 먼저 생성해보겠습니다

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#cccccc" />
    <corners android:radius="20dp" />
</shape>

 

 

2. 소스코드에서 View 생성

 

fun addView() {
        val params: LinearLayout.LayoutParams =
            LinearLayout.LayoutParams(dpToPx(this, 80f), dpToPx(this, 40f))

        val arr = arrayOf("한식", "분식", "중식", "일식")

        for (i in 0..3) {

            val ll = LinearLayout(this)
            ll.orientation = LinearLayout.HORIZONTAL

            val tv = TextView(this)
            tv.text = arr[i]
            tv.gravity = Gravity.CENTER
            tv.textSize = 12f
            tv.background = resources.getDrawable(R.drawable.round_grey)
            tv.layoutParams = params
            ll.setPadding(0, 0, dpToPx(this, 16f), 0)
            ll.addView(tv)
            linear.addView(ll)
        }
}

 

 

소스코드에서 padding 지정 시 float 값이 필요하므로 dpToPx 함수도 생성해보겠습니다 

    fun dpToPx(context: Context, dp: Float): Int {
        return TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            dp,
            context.resources.displayMetrics
        ).toInt()
    }

 

생각보다 간단하게 동적으로 View를 붙일 수 있습니다

 

위 코드를 실행하면 아래와 같이 화면이 나타납니다 :) 

 


궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊

'💡 Kotlin' 카테고리의 다른 글

[Kotlin] Collection (List, Set, Map)  (0) 2023.01.03
[kotlin] Pair  (0) 2023.01.02
[Kotlin] apply, let, with, also, run 비교 (Scope Function)  (0) 2022.07.14
[Kotlin] 배열  (0) 2022.07.02
[Kotlin/Android] Room 사용하기  (0) 2022.06.30