前回に引き続き、色変更したいシリーズです。
やりたいこと
掲題の通り。下記のお悩み解決を目標としました。
android - Changing the color of dialog multichoice items - Stack Overflow
試したこと
まずはcheck boxを表示しているcodeを探してみました。
select_dialog_multichoice_material.xml
18 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 19 android:id="@android:id/text1" 20 android:layout_width="match_parent" 21 android:layout_height="wrap_content" 22 android:minHeight="?android:attr/listPreferredItemHeightSmall" 23 android:textAppearance="?android:attr/textAppearanceMedium" 24 android:textColor="?android:attr/textColorAlertDialogListItem" 25 android:gravity="center_vertical" 26 android:paddingStart="@dimen/alert_dialog_padding_material" 27 android:paddingEnd="@dimen/alert_dialog_padding_material" 28 android:checkMark="?android:attr/listChoiceIndicatorMultiple" 29 android:checkMarkGravity="start" 30 android:ellipsize="marquee" />
ここのcheckMarkというattributeに指定している画像がどうやらcheck boxになっているようです。
material themeではここで指定。
<style name="Theme.Material"> <item name="listChoiceIndicatorMultiple">@drawable/btn_check_material_anim</item>
で、btn_check_material_anim.xmlはこちら。check した時の色はcolorControlActivatedで指定している様子。
http://tools.oesf.biz/android-5.0.1_r1.0/xref/frameworks/base/core/res/res/drawable/btn_check_material_anim.xml
さっそくActivityのthemeにcolorControlActivatedを指定してみたけれど効果なし。
続いてcolorControlActivatedについて調べます。
どうやらsupport libraryではcolorAccentに置き換えられている様子。
ただし、ActivityのthemeにcolorAccentを指定してみたけれどまたまた効果なし。
Cross Reference: /frameworks/support/v7/appcompat/res/values/themes_base.xml
<item name="colorControlActivated">?attr/colorAccent</item>
そういえばDialogってActivityのtheme適用されるんだっけ、と思ってAlertDialogのAPIを確認。
AlertDialog.Builderクラスのconstructorは第2引数にthemeを指定できます。
これでうまくいきました。
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.MyAlertDialogTheme);
<style name="MyAlertDialogTheme" parent="@android:style/Theme.Material.Light.Dialog"> <item name="colorAccent">#E91E63</item> <item name="android:colorAccent">#E91E63</item> </style>