言いたいことはそれだけか

KotlinとかAndroidとかが好きです。調べたことをメモします。٩( 'ω' )و

LollipopでAlertDialogのMultiChoiceItemのcheck buttonの色を変更する

前回に引き続き、色変更したいシリーズです。

やりたいこと

掲題の通り。下記のお悩み解決を目標としました。

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>

f:id:muumuumuumuu:20150215095518p:plain