ActionBar文字颜色

rno*_*way 274 android android-3.0-honeycomb android-actionbar android-text-color

如何更改ActionBar的文本颜色?我继承了Holo Light主题,我能够改变ActionBar的背景,但是我没有找到调整文本颜色的属性是什么.


好的,我可以使用android:textColorPrimary属性更改文本颜色,但它也会更改ActionBar按钮上发生溢出时显示的下拉菜单的文本颜色.知道如何更改那些下拉菜单/列表的颜色吗?

rno*_*way 442

好的,我找到了更好的方法.我现在只能改变标题的颜色.你也可以调整副标题.

这是我的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>
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的方法.但是,为了保持一致性,您应该从`MyTheme.ActionBarStyle`的`Widget.Holo.Light.ActionBar`继承. (31认同)
  • @Adam我有同样的问题,但下一个答案对我有用 - 而不是parent ="@ android:style/TextAppearance.Holo.Widget.ActionBar.Title"使用parent ="@ android:style/TextAppearance" (8认同)
  • 如果您使用的是Appcompat库,请将Holo替换为AppCompat.有用 (8认同)
  • 无法构建 - ADT抱怨它需要v13或更高版本(因此...不适用于大多数Android手机:() (7认同)
  • @LOG_TAG使用Widget.AppCompat.Light.ActionBar (3认同)
  • @sha,对!准确地说,使用"@ style/TextAppearance.AppCompat.Widget.ActionBar.Title"而不是"@android:style/TextAppearance.AppCompat.Widget.ActionBar.Title" (3认同)
  • 根本不起作用.仅更改操作栏颜色.而不是改变文本颜色. (2认同)
  • 在 MyTheme.ActionBarStyle 中设置 name="titleTextStyle" 而不是 name="android:titleTextStyle" 后终于工作了 (2认同)

Phi*_*hil 95

我发现了一种适用于任何风格ActionBar(Sherlock,CompatNative)的方法:

只需使用html设置标题,并指定文本颜色.例如,要将ActionBar文本颜色设置为红色,只需执行以下操作:

getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));
Run Code Online (Sandbox Code Playgroud)

您也可以使用红色十六进制代码#FF0000而不是单词red.如果您遇到此问题,请参阅Android Html.fromHtml(String)不适用于<font color ='#'> text </ font>.


此外,如果要使用颜色资源,此代码可用于获取正确的HEX字符串,并在需要时删除alpha(字体标记不支持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))));
Run Code Online (Sandbox Code Playgroud)

  • 经过数十年的搜索,这是最简单的解决方案!很好! (2认同)
  • @MSI,您也可以使用十六进制值,只需将`red`替换为`"+ color +"`. (2认同)

Bud*_*ius 93

我遇到了和你一样的问题,它是一个Holo.Light主题,但是我想要设置ActionBar颜色的样式,所以我需要更改文本颜色以及Title和Menus.所以最后我去了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>
Run Code Online (Sandbox Code Playgroud)

所以现在你需要做的就是设置任何@color/actionBarText@drawable/actionbarbground你想要的!

  • 对于actionbar sherlock你必须使用actionbar特定的名称,你可以使用这个生成器:http://jgilfelt.github.com/android-actionbarstylegenerator/我们总是在我工作的地方使用它.这很好 (3认同)

Abh*_*han 66

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在运行API级别<11,ActionBarSherlock,并且您想节省对`getIndentifier()`的昂贵调用,您可以查看`(TextView)findViewById(com.actionbarsherlock.R.id.abs__action_bar_title) ;`首先(务必检查它是否为空). (3认同)
  • 这一行 `actionBarTextView.setTextColor(Color.RED);` 上的 `NullPointerException` (2认同)

Mas*_*shi 29

这是一个古老的话题,但对于未来的读者来说,使用ToolBar可以让一切变得非常简单:

Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)


Mil*_*ank 27

我已经完成了简单的一行代码

actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
Run Code Online (Sandbox Code Playgroud)


Nab*_*eas 26

将其添加到操作栏的根目录.我有这个问题.

<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>
Run Code Online (Sandbox Code Playgroud)

actionMenuTextColor - 更改操作栏文本的文本颜色,当它是其中的一部分时它从未起作用Widget.Styled.ActionBar,因此我必须将其添加到根目录.其他2个属性更改操作栏的标题和副标题.


小智 18

在操作栏上设置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>    
Run Code Online (Sandbox Code Playgroud)

  • 这会更改应用程序中各处的主要文本颜色! (4认同)

Tar*_*run 12

如果您想设置字幕的样式,那么只需在自定义样式中添加它.

<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
Run Code Online (Sandbox Code Playgroud)

那些希望获得相同结果的人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>
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 12

最直接的方法是在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>
Run Code Online (Sandbox Code Playgroud)

如果在结束标记之前再添加一行,如图所示,这会将文本颜色更改为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>
Run Code Online (Sandbox Code Playgroud)

如果要将颜色自定义为其他颜色,可以在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>
Run Code Online (Sandbox Code Playgroud)

注意:这会更改标题的颜色以及ActionBar中显示的任何MenuItem的标题.


rea*_*per 8

找到了一种无需在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>
Run Code Online (Sandbox Code Playgroud)


365*_*uns 8

这些功能运行良好

在 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);

}
Run Code Online (Sandbox Code Playgroud)

然后使用它只需提供您的操作栏和新颜色即

ActionBar actionBar = getActionBar();    // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
Run Code Online (Sandbox Code Playgroud)

在科特林

您可以使用这样的扩展功能:

private fun ActionBar.setTitleColor(color: Int) {
    val text = SpannableString(title ?: "")
    text.setSpan(ForegroundColorSpan(color),0,text.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
    title = text
}
Run Code Online (Sandbox Code Playgroud)

然后申请到你ActionBar

actionBar?.setTitleColor(Color.RED)
Run Code Online (Sandbox Code Playgroud)


Kir*_*zin 7

不建议使用许多答案,因此我将更新线程并显示如何在ActionBar(工具栏)和ActionBar弹出菜单中更改文本颜色和背景色。

Android(截至2018年5月)中使用操作栏(工具栏)的最新方法是将主题与NoActionBar一起使用,而改用工具栏。

所以这是您需要的:

  1. 在活动(扩展了AppCompatActivity)中,声明工具栏:

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在活动的布局xml中添加工具栏。在这里,我们将设置我们的自定义(覆盖主题),note 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" />
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在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>
    
    Run Code Online (Sandbox Code Playgroud)

就是这样

ps,如果你问我,我会说:是的,整个主题的事情都是一团糟。


小智 5

这是我检查所有答案后使用的解决方案

<!-- 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>
Run Code Online (Sandbox Code Playgroud)

更改所需的颜色即可使用


one*_*exf 5

Try adding this in your Activity's onCreate. Works on almost every Android version.

 actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));  
Run Code Online (Sandbox Code Playgroud)

or

getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

264931 次

最近记录:

6 年,6 月 前