确定,我可以使用android:textColorPrimary属性更改文本颜色,但是当ActionBar按钮上发生溢出时,它也可以更改显示的下拉菜单的文本颜色。任何想法如何更改那些下拉菜单/列表的颜色吗?
#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。
–杰克·沃顿
2011年6月21日在20:57
无法构建-ADT抱怨它要求v13或更高版本(因此...在大多数Android手机上都无法使用:()
–亚当
13年2月15日在12:31
@Adam我遇到了同样的问题,但是下一个答案对我有用-代替parent =“ @ android:style / TextAppearance.Holo.Widget.ActionBar.Title”使用parent =“ @ android:style / TextAppearance”
–bkurzius
2013年3月20日13:09
如果使用的是Appcompat库,请用AppCompat替换Holo。有用
– sha
2013年9月5日13:25
@LOG_TAG使用Widget.AppCompat.Light.ActionBar
– sha
13-10-15在9:40
#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)无法用于 text font>。此外,如果您要使用颜色资源,此代码可用于获取正确的十六进制字符串,并在需要时删除字母(字体标签不支持字母):
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()中放置一个字符串,并且要在该方法中放置多个参数。当用“ +”替换“,”时,这很完美:-)。
– pinyin_samu
13年3月3日,19:28
经过数十年的搜索,这是最简单的解决方案!很好!
– bmkay
13年12月3日,22:15
@MSI,您也可以使用十六进制值,只需将红色替换为“ + color +”即可。
–菲尔
2014年1月5日,下午1:42
@MSI,您可以尝试这篇文章的建议吗(也更新了我的问题)?只需将“#FF0000”替换为“ + color +”即可。
–菲尔
2014年1月6日在18:27
谢谢菲尔。工作完美!我以这种方式尝试过:getSupportActionBar()。setTitle(Html.fromHtml(“ <font color ='” + color +“'>” +“ Home” +“ font>”)));只需使用'代替\。
–MSIslam
2014年1月6日18:55
#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?值或值-v11或值v-14?
– DroidLearner
13年3月15日在10:02
答案是从2012年2月开始的,当时还没有V14。所以肯定是V11。
–布迪乌斯
2013年3月17日14:23在
在3.0以下,系统没有actionBar。
–布迪乌斯
13年3月18日在10:49
我正在使用Action Bar Sherlock,并且找到了解决方案。谢谢 :)
– DroidLearner
13年3月18日在11:18
对于actionbar sherlock,您必须使用actionbar特定的名称,并且可以使用此生成器:jgilfelt.github.com/android-actionbarstylegenerator我们总是在工作的地方使用它。这很好
–布迪乌斯
13年3月18日在11:34
#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);
– DroidLearner
13年3月18日在5:53
如果您正在运行的API级别<11,ActionBarSherlock并希望节省对getIndentifier()的昂贵调用,则可以查看(TextView)findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);首先(请务必检查它是否不为null)。
–安德烈
13年4月22日在8:36
实际上,在我的情况下,“ ActionBar ID不直接可用”工具栏很容易访问,就像工具栏工具栏= findViewById(R.id.toolbar);一样。在xml布局文件中的com.google.android.material.appbar.AppBarLayout元素所包围的位置,然后是toolbar.setTitleTextColor(getResources()。getColor(R.color.colorViolet));
–YoussefDir
4月25日18:59
#5 楼
这是一个古老的话题,但对于将来的读者来说,使用工具栏使一切变得非常容易:Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
评论
这对我来说很棒。您还可以使用:工具栏.setTitleTextColor(Color.parseColor(“#ffffff”))
– alexrnov
9月16日8:01
#6 楼
我已经用简单的一行代码完成了actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
评论
这实际上不是上面给出的答案的重复:stackoverflow.com/a/19592911/1992342
–mike47
18/09/12在15:34
看起来像个补丁。
–贝尔特拉姆·吉尔福伊尔(Bertram Gilfoyle)
18-09-18在5:22
#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”。 :)
– AnkitRox
15年2月18日在10:32
#8 楼
在操作栏上设置HTML字符串不适用于SDK v21 +中的Material主题。如果要更改它,则应在style.xml
<中设置主文本颜色。 br />
<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>
评论
这将更改应用程序各处的主要文本颜色!
–穆罕默德
17年12月9日在17:28
#9 楼
最简单的方法是在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:textColorPrimary属性使用Android内置的颜色:
<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的标题。
#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>
评论
我正在尝试使用浅色主题,深色动作栏和白色文本。到目前为止,您的代码是我发现的唯一对一切都没有影响的东西,但是它会使整个操作栏变成白色。知道会发生什么吗?是的,我知道这已经一年半了。 :-)
– nasch
15年5月16日在0:12
这帮助我解决了我的问题。我只需要添加
–李岩
2015年9月1日下午6:48
标题消失
– jairhumberto
19/12/24在6:52
#11 楼
不赞成使用许多答案,因此我将更新线程并显示如何在ActionBar(工具栏)上和ActionBar弹出菜单中更改文本颜色和背景色。Android中的最新方法(截至使用操作栏(工具栏)的方法是2018年5月)将主题与NoActionBar一起使用,而改为使用工具栏。
所以这是您需要的:
在Activity(扩展了AppCompatActivity)中声明工具栏:
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
在“活动”的布局xml中添加工具栏。在这里,我们将设置自定义(覆盖主题),请注意
android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
和app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
,它们将起到作用。<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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>
乡亲们就是这样
ps如果您问我,我会说:是的,整个主题都是一团糟。
#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 楼
这是我检查所有答案后使用的解决方案<!-- 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>
更改所需的颜色即可使用
#14 楼
尝试将其添加到您活动的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 +“ font>”; Html.fromHtml(coloredTitle);
– Tincho825
19年1月28日在16:20
#15 楼
这些功能很好用在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?.setTitleColor(Color.RED)
应用于您的
ActionBar
#16 楼
尝试很多方法,在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>
#17 楼
只需将其放入您的主题样式即可。<item name="android:textColorPrimary">@color/yourcolor</item>
#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>
用颜色替换颜色。
评论
我有实质性主题,这些行不起作用,这是我的代码```
评论
刚刚发布了对我有用的解决方案。参见此处stackoverflow.com/a/16175220/627827