ActionBar文本颜色

问题描述 投票:282回答:21

如何更改ActionBar的文本颜色?我继承了Holo Light主题,可以更改ActionBar的背景,但无法确定要更改以更改文本颜色的属性。


[确定,我可以使用android:textColorPrimary属性来更改文本颜色,但是当ActionBar按钮上发生溢出时,它还可以更改下拉菜单显示的文本颜色。知道如何更改这些下拉菜单/列表的颜色吗?

android android-actionbar android-3.0-honeycomb android-text-color
21个回答
447
投票

确定,我找到了更好的方法。我现在只能更改标题的颜色。您也可以调整字幕。

这是我的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>

12
投票

如果您还想设置字幕的样式,则只需以自定义样式添加即可。

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

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>

7
投票

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

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

所以这就是您需要的:

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

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
    
  2. 在活动的布局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" />
    
  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>
    

就是这样

ps.s。如果您问我,我会说:是的,这整个主题都是一团糟。


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>

更改所需的颜色将起作用


4
投票

此功能很好用

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

4
投票

尝试将其添加到您活动的onCreate中。适用于几乎所有Android版本。

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

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

2
投票

尝试很多方法,在较低版本的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>

0
投票

不错的解决方案是使用SpannableStringBuilder并以这种方式设置颜色。您甚至可以在字符串的不同部分使用不同的颜色,添加图像等。

使用新的支持库进行测试。

请参见Android: Coloring part of a string using TextView.setText()?


0
投票

这不是推荐的解决方案,因为我在这里使用android api,但是由于我的应用程序需要在此处无法在xml条件下动态更改主题,因此我需要这样做。但是此解决方案效果很好。

解决方案:-

 /**
 * 
 * @author Kailash Dabhi
 * @email [email protected]
 *
 */ 
 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();
    }

}

0
投票

对于Android 5(棒棒糖),您将必须使用android:actionBarPopupTheme为溢出菜单设置textColor


97
投票

我发现了一种可以与ActionBar的任何样式(SherlockCompatNative)配合使用的方式:

只需使用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>


此外,如果要使用颜色资源,则可以使用此代码获取正确的十六进制字符串,并在需要时删除字母(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))));

0
投票

只需将此设置为您的thme样式。

<item name="android:textColorPrimary">@color/yourcolor</item>


-2
投票

您可以直接在<font>文件中使用html xml属性更改任何文本的颜色。例如在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>

enter image description here


93
投票

我和您遇到了同样的问题,这是一个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


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

30
投票

这是一个古老的话题,但是对于将来的读者来说,使用工具栏使一切变得非常容易:

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

28
投票

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

actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));

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>

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


19
投票

在操作栏上设置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>    

15
投票

最直接的方法是在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中显示的任何MenuItems的标题。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.