AndroidでTimePickerDialog(android.app.TimePickerDialog)の色を色々と変更しようとして調べたのでメモ。
基本的にはthemes.xmlでstyleを定義して、その定義をTimePickerDialogのコンストラクタに渡すことで色を変更できる。
下記例の通り、文字盤以外は個別に色を指定することに成功。文字盤だけは色の指定方法が不明。
themes.xml
<style name="ThemeOverlay.MyApp.TimePicker" parent="@style/Theme.AppCompat.Light.Dialog">
<item name="android:windowBackground">#888888</item>
<item name="android:colorControlActivated">#FFFF00</item>
<item name="android:colorControlNormal">#FF0000</item>
<item name="android:colorAccent">#00FF00</item>
<item name="android:textColorPrimary">#0000FF</item>
<item name="android:textColorPrimaryInverse">#FF00FF</item>
<item name="android:textColorSecondaryInverse">#FFFFFF</item>
</style>
TimePickerDialogの生成コード
TimePickerDialog(
mContext, R.style.ThemeOverlay_MyApp_TimePicker, { _, mHour: Int, mMinute: Int ->
mTime.value = "$mHour:$mMinute"
}, mHour, mMinute, false
)
styleタグでparentに@style/Theme.AppCompat.DayNight.Dialogを指定するとダークモードの場合に文字盤とダイアログ上部の背景色が自動的にダークグレイに切り替わるようになる。
<style name="ThemeOverlay.MyApp.TimePicker" parent="@style/Theme.AppCompat.DayNight.Dialog">
<item name="android:windowBackground">#888888</item>
<item name="android:colorControlActivated">#FFFF00</item>
<item name="android:colorControlNormal">#FF0000</item>
<item name="android:colorAccent">#00FF00</item>
<item name="android:textColorPrimary">#0000FF</item>
<item name="android:textColorPrimaryInverse">#FF00FF</item>
<item name="android:textColorSecondary">#FFFFFF</item>
</style>
ダークモードで表示