动作栏文字颜色
Posted
技术标签:
【中文标题】动作栏文字颜色【英文标题】:ActionBar text color 【发布时间】:2011-08-17 05:27:59 【问题描述】:如何更改 ActionBar 的文本颜色?我继承了 Holo Light Theme,我可以更改 ActionBar 的背景,但我不知道要调整什么属性来更改文本颜色。
好的,我可以使用属性 android:textColorPrimary 更改文本颜色,但它也会更改 ActionBar 按钮上发生溢出时显示的下拉菜单的文本颜色。知道如何更改这些下拉菜单/列表的颜色吗?
【问题讨论】:
刚刚发布了一个对我有用的解决方案。看这里***.com/a/16175220/627827 【参考方案1】:好的,我找到了更好的方法。我现在只能更改标题的颜色。您还可以调整字幕。
这是我的styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
</style>
<style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@color/red</item>
</style>
</resources>
【讨论】:
这是正确的方法。但是,为了保持一致性,您应该从Widget.Holo.Light.ActionBar
继承 MyTheme.ActionBarStyle
。
不会构建 - ADT 抱怨它需要 v13 或更高版本(所以...无法在大多数 Android 手机上运行 :()
@Adam 我有同样的问题,但下一个答案对我有用——而不是 parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title" 使用 parent="@ android:style/TextAppearance"
如果您使用的是 Appcompat 库,请将 Holo 替换为 AppCompat。它有效
@LOG_TAG 使用 Widget.AppCompat.Light.ActionBar【参考方案2】:
我找到了一种适用于任何风格的 ActionBar
(Sherlock、Compat 和 Native)的方法:
只需使用 html 设置标题,并指定文本颜色。例如,要将 ActionBar 文本颜色设置为红色,只需这样做:
getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));
您也可以使用红色的十六进制代码#FF0000
代替单词red
。如果您对此有疑问,请参阅Android Html.fromHtml(String) doesn't work for <font color='#'>text</font>。
另外,如果你想使用颜色资源,这个代码可以用来获取正确的 HEX 字符串,如果需要的话可以去掉 alpha(font 标签不支持 alpha):
int orange = getResources().getColor(R.color.orange);
String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange))));
【讨论】:
这会产生错误,因为您必须在方法 Html.fromHtml() 中放置一个字符串,并且您在该方法中放置了多个参数。当用“+”替换“,”时,效果很好:-)。 经过几十年的搜索,这是最简单的解决方案!干得好! @MSI,您也可以使用十六进制值,只需将red
替换为 " + color + "
。
@MSI,你能试试this post 的建议吗(也更新了我的问题)?只需将#FF0000
替换为"+color+"
。
谢谢菲尔。它工作完美!我试过这样: getSupportActionBar().setTitle(Html.fromHtml(""+"Home"+""));只需使用 ' 代替 \。【参考方案3】:
我遇到了和你一样的问题,这是一个 Holo.Light 主题,但我想设置 ActionBar 颜色的样式,所以我还需要更改文本颜色以及标题和菜单。所以最后我去了 git hub 并查看了源代码,直到我找到了该死的正确样式:
<?xml version="1.0" encoding="utf-8"?>
<!-- For honeycomb and up -->
<resources>
<style name="myTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/myTheme.ActionBar</item>
<item name="android:actionMenuTextColor">@color/actionBarText</item>
</style>
<style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">@drawable/actionbarbground</item>
<item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
</style>
<style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/actionBarText</item>
</style>
</resources>
所以现在你要做的就是设置任何你想要的@color/actionBarText
和@drawable/actionbarbground
!
【讨论】:
我必须在哪里使用这个 xml? values 或 values-v11 或 values v-14?? 答案来自 2012 年 2 月,当时还没有 V14。所以肯定是 V11。 3.0以下系统没有actionBar。 我正在使用 Action Bar Sherlock,我找到了解决方案。谢谢:) 对于actionbar sherlock,你必须使用actionbar特定的名字,你可以使用这个生成器:jgilfelt.github.com/android-actionbarstylegenerator我们总是在我工作的地方使用它。挺好的【参考方案4】:ActionBar ID 不能直接使用,所以你必须在这里做一点黑客攻击。
int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
if (actionBarTitleId > 0)
TextView title = (TextView) findViewById(actionBarTitleId);
if (title != null)
title.setTextColor(Color.RED);
【讨论】:
NullPointerException
在这条线上actionBarTextView.setTextColor(Color.RED);
如果您正在运行 API 级别 getIndentifier() 的昂贵调用,您可以先查看(TextView) findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);
(请务必检查是否它不为空)。
"ActionBar ID is not available directly" 实际上在我的情况下,工具栏很容易访问,如Toolbar toolbar = findViewById(R.id.toolbar);
,在xml布局文件中它被com.google.android.material.appbar.AppBarLayout
元素包围,然后是toolbar.setTitleTextColor( getResources().getColor( R.color.colorViolet ) );
【参考方案5】:
这是一个老话题,但对于未来的读者来说,使用 ToolBar 让一切变得非常简单:
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
【讨论】:
这对我很有用。您还可以使用:toolbar.setTitleTextColor(Color.parseColor("#ffffff"))【参考方案6】:我已经完成了简单的一行代码
actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
【讨论】:
这不是与上面给出的答案本质上的重复:***.com/a/19592911/1992342 看起来像一个补丁。【参考方案7】:将其添加到操作栏的根目录。我有这个问题。
<style name="ActionBar" parent="@style/Theme.AppCompat.Light">
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="actionMenuTextColor">@color/stdDarkBlueText</item>
</style>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/stdDarkBlueText</item>
<item name="android:textSize">12sp</item>
</style>
<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
<item name="android:textColor">@color/stdDarkBlueText</item>
<item name="android:textSize">12sp</item>
</style>
actionMenuTextColor - 更改操作栏文本的文本颜色,当它是 Widget.Styled.ActionBar
的一部分时,它从未起作用,所以我不得不将它添加到根目录。其他 2 个属性更改操作栏的标题和副标题。
【讨论】:
使用“android:actionMenuTextColor”而不是“actionMenuTextColor”。 :)【参考方案8】:最直接的方法是在 styles.xml 中执行此操作。
Google 的模板 styles.xml 目前生成以下内容:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
如果您在结束标记之前再添加一行,如图所示,这会将文本颜色更改为使用 Dark ActionBar 时应有的颜色:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
如果您想将颜色自定义为其他颜色,您可以在 colors.xml 中指定自己的颜色,甚至可以使用 Android 的内置颜色,使用 android:textColorPrimary 属性:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>
注意:这会更改标题的颜色以及 ActionBar 中显示的任何 MenuItem 的标题。
【讨论】:
【参考方案9】:在操作栏上设置 HTML 字符串不适用于 SDK v21+ 中的 Material 主题
如果你想改变它,你应该在你的 style.xml 中设置主要的文本颜色
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Material.Light">
<!-- Customize your theme here. -->
<item name="android:textColorPrimary">@color/actionbar-text-color</item>
</style>
</resources>
【讨论】:
这会改变应用程序中各处的主要文本颜色!【参考方案10】:如果您还想为字幕设置样式,只需将其添加到您的自定义样式中即可。
<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
希望为 AppCompat
库获得相同结果的人,那么这就是我使用的:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<!-- other activity and action bar styles here -->
</style>
<!-- style for the action bar backgrounds -->
<style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:background">@drawable/actionbar_background</item>
<item name="background">@drawable/actionbar_background</item>
<item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/color_title</item>
</style>
</resources>
【讨论】:
我正在尝试使用浅色主题、深色操作栏和白色文本。到目前为止,您的代码是我发现的唯一有任何影响的东西,但是它将整个操作栏变成白色。知道会发生什么吗?是的,我知道这已经一年半了。 :-) 这帮助我解决了我的问题。我只需要同时添加<item name="android:titleTextStyle">
和 <item name="titleTextStyle">
,因为我使用的是appcompat 支持库。
标题消失【参考方案11】:
很多答案已弃用,因此我将更新线程并展示如何更改 ActionBar(工具栏)和 ActionBar 弹出菜单中的文本颜色和背景颜色。
Android 中(截至 2018 年 5 月)使用 Action bar (Toolbar) 的最新方法是将 Theme 与 NoActionBar 一起使用,并改用 Toolbar。
这就是你需要的:
在 Activity(扩展 AppCompatActivity)中声明 Toolbar:
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
在 Activity 的布局 xml 中添加工具栏。在这里,我们将设置我们的自定义(覆盖主题),注意 android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
和 app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
,它们会成功的。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
app:layout_constraintTop_toTopOf="parent" />
在您的 styles.xml 中,您必须覆盖这两种样式以设置自定义颜色:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
</style>
<style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@color/action_bar_text_color</item>
<item name="android:background">@color/action_bar_bg_color</item>
</style>
<style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:background">@color/popup_bg_color</item>
<item name="android:textColorPrimary">@color/popup_text_color</item>
</style>
就是这样的人
附言如果你问我,我会说:是的,整个主题都是一团糟。
【讨论】:
【参考方案12】:找到了无需在 API >= 21 上创建自己的布局即可很好地做到这一点的方法。
它只会为操作栏中的文本着色和控制可绘制对象。
希望它对某人有用。
<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:navigationBarColor">@color/primary_dark</item>
<item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>
<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
<item name="android:textColorPrimary">@color/action_bar_text</item>
<item name="colorControlNormal">@color/action_bar_text</item>
</style>
【讨论】:
【参考方案13】:这些功能运行良好
在 Java 中
private void setActionbarTextColor(ActionBar actBar, int color)
String title = actBar.getTitle().toString();
Spannable spannablerTitle = new SpannableString(title);
spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actBar.setTitle(spannablerTitle);
然后使用它只需输入你的操作栏和新颜色即
ActionBar actionBar = getActionBar(); // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
在 Kotlin 中
你可以使用这样的扩展函数:
private fun ActionBar.setTitleColor(color: Int)
val text = SpannableString(title ?: "")
text.setSpan(ForegroundColorSpan(color),0,text.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
title = text
然后向您的ActionBar
申请
actionBar?.setTitleColor(Color.RED)
【讨论】:
【参考方案14】:这是我检查所有答案后使用的解决方案
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorAccent">@color/Button_color</item>
<item name="android:editTextStyle">@style/EditTextStyle</item>
<item name="android:typeface">monospace</item>
<item name="android:windowActionBar">true</item>
<item name="colorPrimary">@color/Title_Bar_Color</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<item name="android:background">@color/Title_Bar_Color</item>
<item name="background">@color/Title_Bar_Color</item>
<item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/solid_white</item>
<item name="android:textSize">12sp</item>
</style>
<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
<item name="android:textColor">@color/solid_white</item>
<item name="android:textSize">12sp</item>
</style>
更改所需的颜色
【讨论】:
【参考方案15】:尝试将此添加到您的 Activity 的 onCreate 中。适用于几乎所有 Android 版本。
actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
或
getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
【讨论】:
你应该这样写一个字符串: String colouredTitle = "" + Your_Title + ""; Html.fromHtml(coloredTitle);【参考方案16】:只要把它放在你的风格中。
<item name="android:textColorPrimary">@color/yourcolor</item>
【讨论】:
最佳答案!它与 theme.xml 和 parent="Theme.AppCompat.DayNight" 一起使用【参考方案17】:尝试了很多方法,在低版本的API中,一个可行的方法是<item name="actionMenuTextColor">@color/your_color</item>
并且不要使用Android命名空间,希望对你有所帮助
ps:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>
【讨论】:
【参考方案18】:最简单的方法是: 将这两行添加到您的 styles.xml 文件中
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColorSecondary">@color/white</item>
<item name="android:textColor">@color/white</item>
</style>
用你的颜色替换颜色。
【讨论】:
我有材料主题,这些行在这里不起作用是我的代码``` ``【参考方案19】:这里的 Style.xml 是这样的
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/MyTheme</item>
</style>
<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/AppTheme.ActionBarStyle</item>
</style>
<style name="AppTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="AppTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@color/colorBlack</item>
</style>
你应该添加
<item name="actionBarTheme">@style/MyTheme</item>
在应用主题中
【讨论】:
如何在材料中做到这一点 非常有帮助,谢谢。【参考方案20】:一个不错的解决方案是使用 SpannableStringBuilder 并以这种方式设置颜色。您甚至可以在字符串的不同部分使用不同的颜色、添加图像等。
使用新的支持库进行测试。
见Android: Coloring part of a string using TextView.setText()?
【讨论】:
【参考方案21】:这不是推荐的解决方案,因为我将在此处使用 android api,但由于我的应用程序需要在此处无法使用 xml 的条件下动态更改主题,因此我需要这样做。但是这个解决方案效果很好。
解决方案:--
/**
*
* @author Kailash Dabhi
* @email kailash09dabhi@gmail.com
*
*/
public static void setActionbarTextColor(Activity activity, int color)
Field mActionViewField;
try
mActionViewField = activity.getActionBar().getClass()
.getDeclaredField("mActionView");
mActionViewField.setAccessible(true);
Object mActionViewObj = mActionViewField.get(activity
.getActionBar());
Field mTitleViewField = mActionViewObj.getClass().getDeclaredField(
"mTitleView");
mTitleViewField.setAccessible(true);
Object mTitleViewObj = mTitleViewField.get(mActionViewObj);
TextView mActionBarTitle = (TextView) mTitleViewObj;
mActionBarTitle.setTextColor(color);
// Log.i("field", mActionViewObj.getClass().getName());
catch (NoSuchFieldException e)
e.printStackTrace();
catch (IllegalAccessException e)
e.printStackTrace();
catch (IllegalArgumentException e)
e.printStackTrace();
【讨论】:
【参考方案22】:对于 Android 5(棒棒糖),您必须使用 android:actionBarPopupTheme 为溢出菜单设置 textColor。
【讨论】:
【参考方案23】:<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_
android:layout_
android:background="@color/color_primary"
android:theme="@style/GalaxyZooThemeToolbarDarkOverflow"
app:popupTheme="@style/Theme.AppCompat.NoActionBar" />
<style name="GalaxyZooThemeToolbarDarkOverflow" parent="Theme.AppCompat.NoActionBar">
<!-- android:textColorPrimary is the color of the title text
in the Toolbar, in the Theme.AppCompat theme: -->
<item name="android:textColorPrimary">@color/abc_primary_text_material_light</item>
<!-- android:textColorPrimaryInverse is the color of the title
text in the Toolbar, in the Theme.AppCompat.Light theme: -->
<!-- <item name="android:textColorPrimaryInverse">@color/abc_primary_text_material_light</item> -->
<!-- android:actionMenuTextColor is the color of the text of
action (menu) items in the Toolbar, at least in the
Theme.AppCompat theme.
For some reason, they already get the textColorPrimary
when running on API 21, but not on older versions of
Android, so this is only necessary to support older
Android versions.-->
<item name="actionMenuTextColor">@color/abc_primary_text_material_light</item>
<!-- android:textColorSecondary is the color of the menu
overflow icon (three vertical dots) -->
<item name="android:textColorSecondary">@color/abc_secondary_text_material_light</item>
<!-- This would set the toolbar's background color,
but setting this also changes the popup menu's background,
even if we define popupTheme for our <Toolbar> -->
<!-- <item name="android:background">@color/color_primary</item> -->
</style>
**Reference:**
[https://www.murrayc.com/permalink/2014/10/28/android-changing-the-toolbars-text-color-and-overflow-icon-color/][1]
【讨论】:
【参考方案24】:如果您需要以编程方式设置颜色,可以这样做:
static void setActionBarTextColor(Activity activity, int color)
ActionBar actionBar = activity instanceof AppCompatActivity
? ((AppCompatActivity) activity).getSupportActionBar()
: activity.getActionBar();
String title = activity.getTitle(); // or any title you want
SpannableString ss = new SpannableString(title);
ss.setSpan(new ForegroundColorSpan(color), 0, title.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
actionBar.setTitle(ss);
【讨论】:
如果标题改变会怎样?【参考方案25】:就我而言,我切换到AndroidX Toolbar,而不是使用本机操作栏。另外,我依靠view binding 从活动中访问工具栏,但您可以使用findViewById(...)
。
(我删除了不相关的代码)。
styles.xml
:
...
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
</style>
...
activity_main.xml
:
...
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbarMain"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:titleTextColor="@color/colorOnPrimary"
...
/>
...
MainActivity.kt
:
class MainActivity : AppCompatActivity()
private lateinit var binding: ActivityMainBinding
...
override fun onCreate(savedInstanceState: Bundle?)
...
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
setSupportActionBar(binding.toolbarMain)
...
...
【讨论】:
【参考方案26】:我们需要在工具栏中使用 app:theme 属性定义主题,如下面的代码 sn-p。
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
app:theme="@style/AppTheme.ToolbarFont" />
在此之前,我们必须在 styles.xml 文件中添加主题,并且我们必须像下面的代码 sn-p 那样在该样式中定义字体系列。
<style name="AppTheme.ToolbarFont" parent="AppTheme">
<!--This line changes the color of text in Toolbar-->
<item name="android:textColorPrimary">@color/black</item>
<!--This line changes the color of icons in toolbar (back, overflow menu icons)-->
<item name="android:textColorSecondary">@color/azul</item>
<item name="textAllCaps">false</item>
<item name="android:textSize">16sp</item>
<item name="android:fontFamily">@font/montserrat_semi_bold</item>
要添加自定义字体,我们需要在 res 目录中创建一个名为“font”的文件夹,如下图所示。
我们在工具栏中实现了自定义字体。
【讨论】:
【参考方案27】:您可以直接在 xml
文件中使用 html <font>
属性 更改任何文本的颜色。
例如strings.xml
:
<resources>
<string name = "app_name">
<html><font color="#001aff">Multi</font></html>
<html><font color="#ff0044">color</font></html>
<html><font color="#e9c309">Text </font></html>
</string>
</resources>
【讨论】:
以上是关于动作栏文字颜色的主要内容,如果未能解决你的问题,请参考以下文章