[解決済み] AppCompat ToolbarのMenuItemの色合いについて
質問
のdrawableを使用する場合
AppCompat
ライブラリから
Toolbar
を使用すると、色合いが期待通りに動作します。このように
<item
android:id="@+id/action_clear"
android:icon="@drawable/abc_ic_clear_mtrl_alpha" <-- from AppCompat
android:title="@string/clear" />
しかし、もし私が自分のdrawableを使ったり、実際にdrawableを
AppCompat
ライブラリから自分のプロジェクトにコピーしても、全く色合いが変わりません。
<item
android:id="@+id/action_clear"
android:icon="@drawable/abc_ic_clear_mtrl_alpha_copy" <-- copy from AppCompat
android:title="@string/clear" />
には何か特別な魔法があるのでしょうか?
AppCompat
Toolbar
で、そのライブラリからの drawable のみを着色するような特別な魔法があるのでしょうか?私自身のdrawableでこれを動作させる方法はありますか?
API Level 19 のデバイスでこれを実行すると
compileSdkVersion = 21
と
targetSdkVersion = 21
のすべてを使用し、さらに
AppCompat
abc_ic_clear_mtrl_alpha_copy
は正確なコピーであり
abc_ic_clear_mtrl_alpha
からのpng
AppCompat
編集します。
色合いは、私が設定した値に基づいて
android:textColorPrimary
に設定した値に基づいています。
例
<item name="android:textColorPrimary">#00FF00</item>
とすると、緑がかった色になります。
スクリーンショット
AppCompat の drawable で色合いが期待通りに動作している。
AppCompat からコピーした drawable でティントが機能しない
どのように解決するのですか?
なぜなら、AppCompatでTintManagerのソースコードを見てみると、わかります。
/**
* Drawables which should be tinted with the value of {@code R.attr.colorControlNormal},
* using the default mode.
*/
private static final int[] TINT_COLOR_CONTROL_NORMAL = {
R.drawable.abc_ic_ab_back_mtrl_am_alpha,
R.drawable.abc_ic_go_search_api_mtrl_alpha,
R.drawable.abc_ic_search_api_mtrl_alpha,
R.drawable.abc_ic_commit_search_api_mtrl_alpha,
R.drawable.abc_ic_clear_mtrl_alpha,
R.drawable.abc_ic_menu_share_mtrl_alpha,
R.drawable.abc_ic_menu_copy_mtrl_am_alpha,
R.drawable.abc_ic_menu_cut_mtrl_alpha,
R.drawable.abc_ic_menu_selectall_mtrl_alpha,
R.drawable.abc_ic_menu_paste_mtrl_am_alpha,
R.drawable.abc_ic_menu_moreoverflow_mtrl_alpha,
R.drawable.abc_ic_voice_search_api_mtrl_alpha,
R.drawable.abc_textfield_search_default_mtrl_alpha,
R.drawable.abc_textfield_default_mtrl_alpha
};
/**
* Drawables which should be tinted with the value of {@code R.attr.colorControlActivated},
* using the default mode.
*/
private static final int[] TINT_COLOR_CONTROL_ACTIVATED = {
R.drawable.abc_textfield_activated_mtrl_alpha,
R.drawable.abc_textfield_search_activated_mtrl_alpha,
R.drawable.abc_cab_background_top_mtrl_alpha
};
/**
* Drawables which should be tinted with the value of {@code android.R.attr.colorBackground},
* using the {@link android.graphics.PorterDuff.Mode#MULTIPLY} mode.
*/
private static final int[] TINT_COLOR_BACKGROUND_MULTIPLY = {
R.drawable.abc_popup_background_mtrl_mult,
R.drawable.abc_cab_background_internal_bg,
R.drawable.abc_menu_hardkey_panel_mtrl_mult
};
/**
* Drawables which should be tinted using a state list containing values of
* {@code R.attr.colorControlNormal} and {@code R.attr.colorControlActivated}
*/
private static final int[] TINT_COLOR_CONTROL_STATE_LIST = {
R.drawable.abc_edit_text_material,
R.drawable.abc_tab_indicator_material,
R.drawable.abc_textfield_search_material,
R.drawable.abc_spinner_mtrl_am_alpha,
R.drawable.abc_btn_check_material,
R.drawable.abc_btn_radio_material
};
/**
* Drawables which contain other drawables which should be tinted. The child drawable IDs
* should be defined in one of the arrays above.
*/
private static final int[] CONTAINERS_WITH_TINT_CHILDREN = {
R.drawable.abc_cab_background_top_material
};
つまり、特定の resourceIds をホワイトリストに登録し、色付けしていることを意味します。
しかし、彼らがどのように画像を着色しているかを見て、同じことをすることはいつでもできると思います。drawable に ColorFilter を設定するのと同じくらい簡単です。
関連
-
[解決済み] DrawerLayoutを使用して、ActionBar/Toolbarの上やステータスバーの下に表示するにはどうすればよいですか?
-
[解決済み] AppCompat v22.1.0 にアップグレードしたところ、IllegalArgumentException が発生するようになりました。AppCompat は現在のテーマ機能をサポートしていません。
-
[解決済み] AppCompat-v7によるツールバーとコンテクストアクションバー
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] onCreate(Bundle savedInstanceState)とは?
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] Travis.yml ./gradlew : パーミッションが拒否されました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] アンドロイドのdatepickerダイアログで最大の日付を設定するには?
-
[解決済み] Android: xml リソースからの整数値
-
[解決済み] 文字列リソースにHTML?