【Kotlin/Android Studio】Viewの背景色を変更する方法!setBackgroundColor

この記事からわかること
- Android Studio/KotlinでView(Widgets)の背景色を変更する方法
- background属性とbackgroundTintの違い
- setBackgroundColorメソッドの使い方
- setBackgroundResourceメソッドの使い方
- backgroundTintListメソッドの使い方
- リソースに指定しているカラーを適応するには?
- ContextCompat.getColorメソッドの使い方
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
View(Widgets)の背景色を変更する方法
AndroidアプリのView(Widgets)の背景色を変更するにはandroid:background
属性に変更したいカラーを指定します。渡せる値は16進数(#XXXXXX
)やリソースに定義しているカラーです。
<EditText
android:id="@+id/edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#e7e7e7"
android:ems="10"
android:inputType="text"
android:padding="5dp"
android:text="Name" />

またカラーコードは16進数では0〜F
までの6文字で表現しますが、以下のように8文字で表現した場合前の2つは透明度の設定値になります。FF
が透明度0で00
が完全に透明になります。
android:background="#FF000000"
リソースファイルから指定する
カラーコードはリソースファイルから指定するには「res」>「values」>「colors.xml」の中に定義を増やすか新規でカラーコード用のリソースファイルを用意して指定します。
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>
指定する際は@color/[nameで指定した文字]
のようにすることで適応されます。
android:background="@color/black"
Buttonの場合はbackground
では変更できずbackgroundTint
を使用する必要があるようです。
backgroundとbackgroundTintの違い
background
属性とbackgroundTint
属性の違いは以下の通りです。
background
background属性はViewの背景を指定する。Colorコードの指定、ColorリソースまたはDrawableリソースが指定できる。
backgroundTint
backgroundTint属性はViewの背景色を指定する。background属性にDrawableリソースを指定した場合、そのDrawableの色をbackgroundTintで指定した色に変更することができる。
コードから動的に背景色を変更する
Buttonの背景色を動的にコードをから変更するにはsetBackgroundColor
メソッドに引数にColorクラスを渡します。もともと定義されているカラーを呼び出すことやrgb
メソッドを使用してカラーコードを指定することも可能です。
editText.setBackgroundColor(Color.GREEN)
editText.setBackgroundColor(Color.rgb(0, 0, 0))
リソースファイルから指定する
リソースファイルのカラーを取得するにはsetBackgroundColor
メソッドを使用する前にContextCompat.getColor
メソッドを使用して実際の色値を取得する必要があります。そのままリソースIDを指定してもうまく動作しないのて注意してください。
val colorValue = ContextCompat.getColor(this, R.color.black)
editText.setBackgroundColor(colorValue)
editText.setBackgroundColor(R.color.black) // ×
setBackgroundResourceメソッド
setBackgroundResource
メソッドを指定することでリソースIDをそのまま指定することで背景色を変更することも可能です。ですがこの指定は正確にはdrawableリソースを指定する場合に使用するメソッドなので角丸など他の指定が崩れる可能性があるので注意してください。
editText.setBackgroundResource(R.color.black)
またbackgroundTint
をXMLから指定している場合はリソースの背景色を変更する属性のためsetBackgroundResource
から指定している色は適応されません。
backgroundTintListメソッド
backgroundTint
の値をKotlin側から変更するにはbackgroundTintList
を使用します。単純にカラーコードやリソースを渡すのではなくContextCompat.getColorStateList
で指定する必要があります。
editText.backgroundTintList =
ContextCompat.getColorStateList(this.requireContext(), R.color.black)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。