如何设置新工具栏的标题颜色?

丹尼斯:

我使用的是新的v7工具栏,我一生都无法确定如何更改标题的颜色。我已经将工具栏的@style设置为在styles.xml中声明的样式,并应用了带有textColor的titleTextStyle。我想念什么吗?我正在为棒棒糖编码,但是目前正在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"/>
Eugen Pechanec:

选项1)快速简便的方法(仅工具栏)

从appcompat-v7-r23开始,您可以直接在您Toolbar的样式上使用以下属性

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

如果您的最低SDK为23,并且您使用native,则Toolbar只需将名称空间前缀更改为即可android

在Java中,可以使用以下方法:

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

这些方法采用的是颜色int而不是颜色资源ID!

选项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"/>

values / 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>

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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章