1. ホーム
  2. android

[解決済み] 新しいツールバーのタイトルカラーはどのように設定するのですか?

2022-06-13 21:53:18

質問

新しい v7 ツールバーを使用していますが、タイトルの色を変更する方法がどうしてもわかりません。 私は、Toolbar の @style を styles.xml で宣言されたスタイルに設定し、textColor を持つ titleTextStyle を適用しました。 何か見落としているのでしょうか? 私はLollipopのためにコーディングしていますが、現在Kitkatデバイスでテストしています。

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>

    <style name="ActionBar" parent="Theme.AppCompat">
        <item name="android:background">@color/actionbar_background</item>
        <item name="android:titleTextStyle">@style/ActionBar.TitleTextStyle</item>
    </style>

    <style name="ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/actionbar_title_text</item>
    </style>

</resources>

actionbar.xml。

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar_actionbar"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    style="@style/ActionBar"/>

どのように解決するのですか?

オプション 1) 手軽で簡単な方法 (ツールバーのみ)

appcompat-v7-r23 以降では、以下の属性を直接 Toolbar やそのスタイルに直接使えます。

app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"

最小のSDKが23で、ネイティブの Toolbar を使用している場合は、名前空間プレフィックスを android .

Javaでは以下のメソッドを使うことができます。

toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);

これらのメソッドはカラーリソースIDではなく、カラーintを受け取ります!

オプション2) ツールバーのスタイルとテーマの属性をオーバーライドする

レイアウト/xxx.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:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.MyApp.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    style="@style/Widget.MyApp.Toolbar.Solid"/>

値/styles.xml

<style name="Widget.MyApp.Toolbar.Solid" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/actionbar_color</item>
    <item name="android:elevation" tools:ignore="NewApi">4dp</item>
    <item name="titleTextAppearance">...</item>
</style>

<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <!-- Parent theme sets colorControlNormal to textColorPrimary. -->
    <item name="android:textColorPrimary">@color/actionbar_title_text</item>
</style>

助けてください! アイコンの色も変わってしまった!

PeterKnut は、これがオーバーフロー ボタン、ナビゲーション ドローワ ボタン、および戻るボタンの色に影響することを報告しました。また SearchView .

アイコンの色について。アイコンに使用される colorControlNormal から継承しています。

  • android:textColorPrimary ダークテーマ用 (黒地に白)
  • android:textColorSecondary 明るいテーマ用 (白地に黒)

に適用すると アクションバーのテーマ に適用すると、アイコンの色をカスタマイズすることができます。

<item name="colorControlNormal">#de000000</item>

r23 までの appcompat-v7 にはバグがあり、このようにネイティブの対応もオーバーライドする必要がありました。

<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>

助けてください! 私のSearchViewは混乱しています!

注意: このセクションは廃止される可能性があります。

appcompat-v7 に含まれるものと異なる矢印を使う検索ウィジェットを使っているため、手動で アプリのテーマ . サポートライブラリのドローアブルは正しく色付けされます。そうでなければ、常に白になります。

<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>

検索ビューのテキストについては...簡単な方法はありません。ソースを調べた結果、テキスト表示にする方法を見つけました。テストしていないので、うまくいかなかった場合はコメントで教えてください。

SearchView sv = ...; // get your search view instance in onCreateOptionsMenu
// prefix identifier with "android:" if you're using native SearchView
TextView tv = sv.findViewById(getResources().getIdentifier("id/search_src_text", null, null));
tv.setTextColor(Color.GREEN); // and of course specify your own color

ボーナス:ActionBarのスタイルとテーマの属性をオーバーライドする

デフォルトのアクション appcompat-v7 のアクションバーの適切なスタイルは次のようになります。

<!-- ActionBar vs Toolbar. -->
<style name="Widget.MyApp.ActionBar.Solid" parent="Widget.AppCompat.ActionBar.Solid">
    <item name="background">@color/actionbar_color</item> <!-- No prefix. -->
    <item name="elevation">4dp</item> <!-- No prefix. -->
    <item name="titleTextStyle">...</item> <!-- Style vs appearance. -->
</style>

<style name="Theme.MyApp" parent="Theme.AppCompat">
    <item name="actionBarStyle">@style/Widget.MyApp.ActionBar.Solid</item>
    <item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
    <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>