androdアプリを作っていて、色に関してハマったことを示します
*注: リファレンス見たらすごく当たり前のことですが、ご了承ください
##setBackgroundResourceとsetBackgroundColorの違いについて
まず、動的にViewの色を変えたいと思い、colors.xmlに記載したものを参照して普段は
sample.kt
view.setBackgroundResource(R.color.blue)
としていましたが、一度
sample.kt
view.setBackgroundColor(R.color.blue)
こちらを使ってみると
NullPointerと怒られました
なんだこれはと公式リファレンスを参照してみると、一目瞭然
###setBackgroundResourceは引数にリソースID
###setBackgroundColorは引数に16進数のカラーコード
を受ける形となっていました
リソースIDもconstantな数値としてRクラスに保存されており、同じIntなのでビルドしてみるまで気づきませんでした。
これに加えて
sample.kt
ContextCompat.getColor(context, R.color.blue)
というものがありました。
これも、getColorだから色のリソースIDを返してくれるのかと思い込んでいましたが、16進数
AARRGGBB (AA:透明度)
を返していました
つまりまとめると、
メソッド | 引数 | 返り値 |
---|---|---|
setBackgroundColor | 16進数のカラーコード | void(Unit) |
setBackgroundResource | リソースID | void(Unit) |
ContextCompat.getColor | context, リソースID | 16進数のカラーコード |
以上、簡単なまとめ記事でした。
改善点や、誤解を招く表記などございましたらお教えください。