본문 바로가기
안드로이드

[Android] 동적버튼

by 엘딘 2022. 4. 3.
activity_main.xml
<LinearLayout
        android:id="@+id/linerLayout"
        android:orientation="vertical"
        android:layout_width="300dp"
        android:layout_height="398dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent">

</LinearLayout>

 

MainActivity
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val linerLayout = findViewById<LinearLayout>(R.id.linerLayout)

        var childLayout:LinearLayout? = null

        // 버튼 초기값 8개
        var btnCount = 8

        for(i in 0 until btnCount){
            // 한줄에 버튼 3개식 배치
            if(i % 3 == 0) {
                childLayout = LinearLayout(this)
                childLayout.orientation = LinearLayout.HORIZONTAL
                // 버튼들이 한줄에 꽉차도록, 버튼 높이는 100
                val layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100)
                childLayout.layoutParams = layoutParams
            }

            // 버튼 폭, 넓이 맞춰주기
            // layout을 만드는 부분
            val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
            btnParams.weight = 1.0f

            // Button클래스, this는 MainActivity 현재 클래스에 적용할 것이라는것
            // 동적버튼 할당
            val normalBtn = Button(this).apply {

                // 버튼의 타이틀
                text = (i + 1).toString()
                layoutParams = btnParams
                id = i

                setOnClickListener {
                    val myToast = Toast.makeText(this.context, "${id + 1}번 버튼 클릭!", Toast.LENGTH_SHORT)
                    myToast.show()
                }
            }

            childLayout?.addView(normalBtn)

            // 버튼이 3개 미만으로 남을 경우 폭에 맞춰서 추가!
            if(i % 3 == 2 || i == (btnCount - 1)){
                linerLayout.addView(childLayout)
            }
        }
    }
}

'안드로이드' 카테고리의 다른 글

[Android] Geocoding  (0) 2022.04.03
[안드로이드] Camera  (0) 2022.04.03
[Android] SQLite  (0) 2022.04.02
[Android] Singleton  (0) 2022.03.31
[Android] Preferences  (0) 2022.03.31

댓글