在工具栏中更改标题颜色?

40

我有一个工具栏,我使用它来设置标题:

((ActionBarActivity)getActivity()).getSupportActionBar().setTitle("Home");

有办法将颜色从黑色改为白色吗?

我尝试创建自己的主题并在XML中进行设置,像这样,但是不起作用:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme2" parent="Theme.AppCompat">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="android:textColorPrimary">@color/primary_text</item>
        <item name="android:textColorSecondary">@color/secondary_text</item>

    </style>

    <style name="Widget.MyApp.ActionBar" parent="Widget.AppCompat.ActionBar">
        <item name="android:background">@color/primary</item>
        <item name="theme">@style/ThemeOverlay.MyApp.ActionBar</item>
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    </style>

    <style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
        <item name="android:textColorPrimary">#FFFFFF</item>
    </style>



</resources>

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#e5e5e5"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:minHeight="?attr/actionBarSize"
        android:background="@color/primary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MyApp.ActionBar">

        <Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/statsSpin"
            android:spinnerMode="dropdown"
            android:textColor="#FFFFFF"/>


    </android.support.v7.widget.Toolbar>



    <ListView
        android:id="@+id/yourStats"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:dividerHeight="0px"
        android:divider="@null"

        >
    </ListView>



</LinearLayout>

你是指通过编程还是通过主题来实现? - tachyonflux
这是一个重复的问题,已经在https://dev59.com/n3E95IYBdhLWcg3wluwg#2285722上得到了回答。 - RBK
@RaviKoradiya 那个答案已经过时了,顺便说一下,它是针对旧版本的Android的。 - user153275
这不是一个答案,而是一条信息。你不需要写((ActionBarActivity)getActivity()).getSupportActionBar().setTitle("Home");来改变工具栏标题。只需写setTitle(getString(R.string.title));就可以了。 - codepeaker
17个回答

56

编程方式:

toolbar.setTitleTextColor(0xFFFFFFFF);

1
它将支持API 23及以上版本。 - Asthme
8
如果你正在使用AppCompat库,那就不会有这个问题。 - zundi
1
用这个方法可以解决我的问题:toolbar.setTitleTextColor(android.graphics.Color.WHITE); 。。谢谢! - Gene Bo
1
我们能否得到一个具有暗色主题意识的现代化答案? - behelit

29
根据AppCompat的创建者在主题与样式博客文章AppCompat的21版中的帖子所述,可以通过将android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"添加到您的Toolbar的XML中来实现DarkActionBar工具栏(即具有深色背景和浅色文本的Toolbar)。
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="@color/primary"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/statsSpin"
        android:spinnerMode="dropdown"/>


</android.support.v7.widget.Toolbar>

这将更改文本颜色和许多属性的默认颜色(例如将您的Spinner更改为浅色文本,以适应暗背景)。


为什么要使用app:theme而不是android:theme(两者都起作用)? - 0leg
3
在 AppCompat 22.1 之前,你必须使用 app:theme - 如果你正在使用比这个版本更新的版本(目前应该是这样),那么是的,你应该在所有地方使用 android:theme。我已经更新了我的回答以反映当前的最佳实践。 - ianhanniballake

28
在应用程序基础主题中创建新样式。
  <style name="custom_toolbar" parent="@style/Widget.AppCompat.Toolbar">
        <item name="titleTextColor">#replace with color</item>
  </style>

并使用样式来控制工具栏

  <item name="toolbarStyle">@style/custom_toolbar</item>

2
请注意,“toolbarStyle”属性仅适用于API 21及以上版本。 - eugeneek

10

我知道以上有很多希望的答案,希望它能帮助那些不理解以上答案的人。

Android有一个名为Toolbar的视图。这个视图有一个标题,通常从color.xml资源中获取默认颜色,该项名称为accent。您可以通过两种方式更改工具栏颜色。

  1. 通过xml方式,我建议您这样做,下面是一个例子:

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:titleTextColor="@color/White" />Here you can change it.Remember APP attribute not ANDROID
    
  2. 可以通过在活动或片段中的程序方式来实现。

  3. Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
    toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.colorAccent));
    

6
如果你只想改变标题文字的颜色,那么可以尝试这个方法: getSupportActionBar().setTitle(Html.fromHtml("<font color='#746E66'>" + titleText + "</font>")); 它可以生效!

3
你可以通过扩展Widget.AppCompat.Toolbar并设置titleTextAppearance和subtitleTextAppearance属性来定义自定义工具栏样式。这样,您可以更改工具栏标题和副标题的颜色和文本大小以供参考。http://www.zoftino.com/android-toolbar-tutorial
<style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="toolbarStyle">@style/MyToolBarStyle</item>
    </style>
    <style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
        <item name="titleTextAppearance">@style/MyTitleTextAppearance</item>
        <item name="subtitleTextAppearance">@style/MySubTitleTextAppearance</item>
    </style>
    <style name="MyTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
        <item name="android:textSize">25dp</item>
        <item name="android:textColor">#ff3d00</item>
    </style>
    <style name="MySubTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
        <item name="android:textSize">20dp</item>
        <item name="android:textColor">#1976d2</item>
    </style>

2

我使用下面的代码进行修复,它适用于每个API级别:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/color_primary</item>
    <item name="colorPrimaryDark">@color/color_primary_dark</item>
    <item name="colorAccent">@color/color_accent</item>
    <item name="toolbarStyle">@style/CustomToolBarStyle</item>
</style>

<style name="CustomToolBarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="titleTextColor">@color/title_text_color</item>
</style>

1
它可以通过编程进行更改,就像上面的答案所示。但为了减少代码复杂性,您应该通过style.xml进行更改。首先,在res/values文件夹下创建attrs.xml,然后像下面这样添加两个引用到attrs.xml文件夹中。

attrs.xml

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <attr name="toolbar_theme" format="reference" />
    <attr name="toolbar_theme_title" format="reference" />
</resources>

在定义引用之后,需要在style.xml中创建一个样式,如下所示。

style.xml

<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="colorPrimary">#00A4E4</item>
      <item name="colorPrimaryDark">#AB0634</item>
      <item name="colorAccent">#AB0634</item>
      <item name="toolbar_theme">@style/CustomTheme.Toolbar</item>
      <item name="toolbar_theme_title">@style/CustomTheme.Toolbar.Title</item>
      <item name="android:textColorPrimary">@color/black</item>
      <item name="android:textColorSecondary">@android:color/black</item>
      <item name="windowActionModeOverlay">true</item>
</style>

<style name="CustomTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
     <!-- if you have a navigationdrawer you change it color also -->
     <item name="colorControlNormal">#AB0634</item>
</style>

<style name="CustomTheme.Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
     <!-- Set title size -->
     <item name="android:textSize">@dimen/abc_text_size_title_material_toolbar</item>
     <!-- Set title color -->
     <item name="android:textColor">#AB0634</item>
</style>

现在我们已经在attrs.xml中创建了toolbar_themetoolbar_theme_title引用,然后将这些引用赋给我们在style.xml中定义的自定义主题。
最后,我们可以像下面这样将此引用应用到工具栏中。
<android.support.v7.widget.Toolbar
     android:id="@+id/toolbar"
     android:layout_width="match_parent"
     android:layout_height="?attr/actionBarSize"
     android:background="?attr/colorPrimary"
     android:theme="?attr/toolbar_theme"
     app:titleTextAppearance="?attr/toolbar_theme_title"
     android:elevation="4dp"
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

就是这样。您可以通过编程方式提供此主题,或者像下面这样在androidmanifest.xml中设置。

通过编程方式

 public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setTheme(R.style.CustomTheme); // (for Custom theme)
    this.setContentView(R.layout.myactivity);

androidmanifest.xml

 <application
     android:theme="@style/CustomTheme">

或者

 <activity
     android:theme="@style/CustomTheme">

0

您可以使用属性actionBarTheme来更改操作栏的主题,如下所示。虽然它是在API级别21中添加的,但似乎与旧的API兼容。

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>

0
在 Kotlin 中,使用 Sandip 的答案:
with(getSupportActionBar()) {
        val titleText: String = title.toString()
        setTitle(Html.fromHtml("<font color='#746E66'>" + titleText + "</font>"))
    }

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