web-dev-qa-db-ja.com

プログラムでツールバーの背景色を変更しても、ツールバーのタイトルの背景色は変更されません

これを行うことにより、プログラムでツールバーの背景色を変更しようとしています:

getSupportActionBar().setBackgroundDrawable(newColorDrawable(getResources().getColor(R.color.test_color_blue)));

そして、これが結果です:

前:

enter image description here

後:

enter image description here

ツールバーのタイトルの背景色が以前と同じである方法。

ここに私のツールバーの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>
22
EkKoZ

コードを次のように変更します。

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>

結果

新しい背景色を設定する前に:

picture before background color change

以降:

picture after background color change

13
reVerse

遅いですが、役に立つコメントになることを願っています

私はこのitemをアクティビティスタイルで持っていました

<item name="Android:background">someColor</item>

したがって、toolbar色を変更しても、タイトルとメニュー項目は背景を変更しませんでした。このitemを削除したところ、完璧に機能するようになりました。

詳細を理解する時間はありませんでしたが、他の人にとっては役に立つかもしれません。

5
Igor Tyulkanov

これを使用してテキストビューにアクセスします

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());
0
Kai Wang