これを行うことにより、プログラムでツールバーの背景色を変更しようとしています:
getSupportActionBar().setBackgroundDrawable(newColorDrawable(getResources().getColor(R.color.test_color_blue)));
そして、これが結果です:
前:
後:
ツールバーのタイトルの背景色が以前と同じである方法。
ここに私のツールバーのxmlがあります:
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center_vertical"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/Theme.Toolbar">
そして、ここにテーマがあります:
<style name="Theme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="Android:maxHeight">@dimen/abc_action_bar_default_height_material</item>
<item name="Android:background">@color/primary</item>
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@Android:color/white</item>
<item name="titleTextAppearance">@style/Theme.Toolbar.Title</item>
</style>
コードを次のように変更します。
toolbar.xml
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
style="@style/MyToolbarStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center_vertical">
テーマ/スタイル
<style name="MyToolbarStyle">
<item name="Android:maxHeight">@dimen/abc_action_bar_default_height_material</item>
<item name="Android:background">@color/primary</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="titleTextAppearance">@style/Theme.Toolbar.Title</item>
<!-- No need for colorPrimary, colorPrimaryDark, colorAccent here
this should go to the AppTheme -->
</style>
結果
新しい背景色を設定する前に:
以降:
遅いですが、役に立つコメントになることを願っています
私はこのitem
をアクティビティスタイルで持っていました
<item name="Android:background">someColor</item>
したがって、toolbar
色を変更しても、タイトルとメニュー項目は背景を変更しませんでした。このitem
を削除したところ、完璧に機能するようになりました。
詳細を理解する時間はありませんでしたが、他の人にとっては役に立つかもしれません。
これを使用してテキストビューにアクセスします
public void changeToggleTitle() {
if (mToolbar != null) {
for(int i= 0; i < mToolbar.getChildCount(); i++){
View v = mToolbar.getChildAt(i);
if(v != null && v instanceof TextView){
TextView t = (TextView) v;
// Do the magic
}
}
}
}
mToolbar.setBackgroundResource(mGameEnum.getPrimeColorRes());