新しい v7 ツールバーを使用していますが、タイトルの色を変更する方法がわかりません。ツールバーの @style を、styles.xml で宣言されたスタイルに設定し、textColor で titleTextStyle を適用しました。何か見落としているのでしょうか? Lollipop 用にコーディングしていますが、現在は Kitkat デバイスでテストしています。
スタイル.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>
アクションバー.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
オプション 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"/>
値/スタイル.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>
appcompat-v7 から r23 までにはバグがあり、次のようにネイティブの対応部分もオーバーライドする必要がありました。
<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>