操作栏文字颜色

313

如何更改ActionBar的文本颜色?我继承了Holo Light主题,能够更改ActionBar的背景,但找不到可调整的属性来更改文本颜色。


好的,我可以使用android:textColorPrimary属性更改文本颜色,但这也会更改在ActionBar按钮上溢出时显示的下拉菜单的文本颜色。有什么办法可以更改那些下拉菜单/列表的颜色吗?


我刚刚发布了一个对我有效的解决方案。请查看这里https://dev59.com/c2025IYBdhLWcg3wVkYR#16175220 - spaceMonkey
28个回答

11

有很多答案已经过时了,所以我会更新帖子并展示如何在ActionBar(工具栏)和ActionBar弹出菜单中更改文本颜色和背景颜色。

在Android中(截至2018年5月),使用Action bar(Toolbar)的最新方法是使用无ActionBar的主题,并使用Toolbar代替。

所以这是你需要做的:

  1. 在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_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>
    

    就这样吧,朋友们。

    顺便说一句,如果你问我,我会说:是的,整个主题的事情真是一团糟。


    10

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

    9
    这些函数表现良好。

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

    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>
    

    更改所需的颜色,它将正常工作。


    5
    尝试在您的Activity的onCreate方法中添加此代码。适用于几乎所有Android版本。
     actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));  
    

    或者

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

    你应该像这样放置一个字符串:String coloredTitle = "<font color='#FFFFFF'>" + Your_Title + "</font>";Html.fromHtml(coloredTitle); - Tincho825

    3

    将以下代码放入您的主题样式中即可。

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


    最佳答案!它与themes.xml和parent="Theme.AppCompat.DayNight"一起工作。 - Fortran

    2
    尝试许多方法,在API的低版本中,一种可行的方法是<item name="actionMenuTextColor">@color/your_color</item>,不要使用Android命名空间,希望能帮到你。
      <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>
    

    2
    最简单的方法是:
    将以下两行添加到您的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>
    

    用你自己的颜色替换颜色。


    我有一个Material主题,这些行不起作用。这是我的代码: - Shoaib Kakal

    1
    在我的情况下,我改用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)
        ...
      }
    
      ...
    }
    

    1

    这里的 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> 
    

    在AppTheme中

    1
    如何在Material中实现此功能。 - Shoaib Kakal
    非常有帮助,谢谢。 - Nicolas Mage

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接