Android - 无法更改操作栏文本颜色

Posted

技术标签:

【中文标题】Android - 无法更改操作栏文本颜色【英文标题】:Android - Can't change action bar text colour 【发布时间】:2020-08-18 00:59:46 【问题描述】:

我正在尝试将自定义样式应用于材质主题操作栏。没什么特别的,只是标题文本颜色的简单变化,但是我根本无法改变颜色。我在主题 xml 中设置了一个主题应用程序主题,如下所示:

<resources>

    <style name="AppTheme" parent="Base.AppTheme">
        <item name="android:navigationBarColor">?android:attr/colorPrimaryDark</item>
        <item name="actionBarStyle">@style/AppBarLayout</item>
    </style>

    <style name="Base.AppTheme" parent="Theme.MaterialComponents.DayNight">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorSecondary">@color/colorSecondary</item>
        <item name="colorSecondaryVariant">@color/colorSecondaryDark</item>
        <item name="colorOnPrimary">@color/colorTextLight</item>
        <item name="colorOnSecondary">@color/colorTextDark</item>
        <item name="colorError">@color/colorError</item>
    </style>

</resources>

引用的操作栏样式在样式 xml 中定义为:

<style name="AppBarLayout" parent="Widget.AppCompat.ActionBar">
    <item name="background">?attr/colorPrimaryDark</item>
    <item name="titleTextStyle">@style/AppBarText</item>
</style>

titleTextStyle 引用的样式也在样式 xml 中定义为:

<style name="AppBarText" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColor">@color/colorError</item>
</style>

我试过后一种风格的其他属性,比如:

<item name="android:titleTextStyle">@color/colorError</item>
<item name="titleTextStyle">@color/colorError</item>
<item name="colorOnPrimary">@color/colorError</item>
<item name="android:textColorPrimary">@color/colorError</item>

我也尝试过将带有其他属性的 AppBarText 样式应用到 titleTextStyle,例如 android:textAppearance。唉 - 没有运气。

我怎样才能改变这种情况?也许我误解了 Material 组件的工作原理?

【问题讨论】:

【参考方案1】:

我不确定这是否可行,但请尝试此代码一次:

int labelColor = getResources().getColor(R.color.label_color);
String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!!

html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE); 

getSupportActionBar().setTitle(colorString);

【讨论】:

你试过我的答案了吗?

以上是关于Android - 无法更改操作栏文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

Sherlock 操作栏更改文本颜色

导航到下一个活动时更改操作栏颜色及其文本对齐方式

操作栏菜单项文本颜色

操作栏菜单项文本颜色

在 Android 11 (API 30) 中以编程方式更改状态栏文本颜色

无法更改 iOS 7 搜索栏中的文本颜色