【Android】ボタンの色や形を動的に変更する


xml上での設定ではなく、ボタンの角丸・輪郭・押下時のレイアウト変更を動的に設定する方法のメモ。

手順

xmlでボタン作成

activity_main.xml
    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button"/>

kotlin内でレイアウト定義

MainActivity.kt
        val drawable = GradientDrawable()
        //角丸
        drawable.cornerRadius = 200f
        //輪郭
        drawable.setStroke(6, Color.parseColor("#77ccff"))
        //ボタン押下時・通常時の色指定
        drawable.color = ColorStateList(
            arrayOf(intArrayOf(android.R.attr.state_pressed), intArrayOf()),
            intArrayOf(Color.parseColor("#88ddff"), Color.parseColor("#99eeff"))
        )
        //上記で設定したdrawableをボタン背景に設定
        binding.button.background = drawable