2020年3月9日月曜日

Material Design Components for Android 1.1.0 から Checkbox で android:button を指定するなら app:useMaterialThemeColors="false" も必要(なことが多い)

Checkbox のマークをカスタマイズするときは android:button に drawable resource を指定します。

例えば以下のような drawable を用意して Checkbox の android:button に指定したのが次のスクリーンショットの下2つです。
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item  
  4.         android:bottom="7dp"  
  5.         android:left="7dp"  
  6.         android:right="7dp"  
  7.         android:top="7dp">  
  8.         <selector>  
  9.             <item android:state_checked="true">  
  10.                 <shape android:shape="oval">  
  11.                     <size  
  12.                         android:width="18dp"  
  13.                         android:height="18dp" />  
  14.                     <stroke  
  15.                         android:width="6dp"  
  16.                         android:color="#6666ff" />  
  17.                 </shape>  
  18.             </item>  
  19.             <item>  
  20.                 <shape android:shape="oval">  
  21.                     <size  
  22.                         android:width="18dp"  
  23.                         android:height="18dp" />  
  24.                     <stroke  
  25.                         android:width="2dp"  
  26.                         android:color="#cccccc" />  
  27.                 </shape>  
  28.             </item>  
  29.         </selector>  
  30.     </item>  
  31. </layer-list>  
  1. <CheckBox  
  2.     ...  
  3.     android:button="@drawable/checkbox"  
  4.     ... />  




全く同じコードで Activity の theme を Material Design Components for Android 1.0.0 に変えたのが次のスクリーンショットです。



同じようになってますね。

全く同じコードで Activity の theme を Material Design Components for Android 1.1.0 に変えたのが次のスクリーンショットです。



なんということでしょう!android:button で指定した drawable resource が Material Design の theme color で tint されるようになりました。tint で使われる色は colorControlActivated と colorOnSurface です。

この挙動を止めるには app:useMaterialThemeColors="false" を指定します。
  1. <CheckBox  
  2.     ...  
  3.     android:button="@drawable/checkbox"  
  4.     app:useMaterialThemeColors="false"  
  5.     ... />  




tint されなくなりました!



0 件のコメント:

コメントを投稿