経緯
カスタムViewを作ったけど、ダークモードのことをまったく気にしなかったせいで、カスタムViewの背景が真っ白になってしまった。
思い
values-night
フォルダを用意してcolors.xml
を入れるのもいいけど、そこまでしなくても標準の設定で十分なんだよなぁ。じゃあ標準ってどうやればいいんだ?と思って開発者サイト見たら、しっかり書いてあった。
ハードコードした色を削除してください(白を指定した背景色など)。その代わりとして ?android:attr/colorBackground テーマ属性を使用します。
なーんだ。これ使えば楽勝じゃん。
残念。mergeタグにbackgroundは効かないんだな。
merge
タグってこういう所で融通きかないよね。duplicateParentState
つけないと正しく動作しない問題は解決してくれるけど。さて、となると?android:attr/colorBackground
をコード上で参照しないといけないけど、どう実装すればいいんだ?
答え
ググったらバリバリ答えが書いてあるページが出てきた。
how to get background color from current theme programmatically
TypedValue
を使えば参照できるらしい。というわけで最終的に実装した形がこれ
typedValue = TypedValue()
context.theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true)
setBackgroundColor(typedValue.data)
全然ちょろかった。