Day/Night テーマ切替時に Vector Drawables アイコンの色を自動変更させたい

Vector Drawableの各パスの色は、XML形式の一部として


android:fillColor="..."

という形式で定義されています。

これは、


android:fillColor="@color/colorPrimary"

などのカラーリソース や、


android:fillColor="?attr/colorControlNormal"

などのテーマ属性 に対応しています。


<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="?attr/colorControlNormal"
        android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
    <path
        android:fillColor="?attr/colorControlNormal"
        android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
</vector>

colorControlNormal 属性は Day/Night テーマのデフォルトです。

👉 Combining Vector Drawables with Day/Night Theme | by Tim Mutton | Medium 

 

まとめ

以下のように、Day/Night テーマ変更時にアイコンの色を変化させるには、

Day/Night theme Vector Drawables

Vector Drawable 内


<path
    android:fillColor="?attr/colorControlNormal"
    ...

とするとよい。


関連ワード:  AndroidGoogleKotlinおすすめ開発