【问题标题】:Change title color in toolbar?更改工具栏中的标题颜色?
【发布时间】:2015-05-11 08:26:36
【问题描述】:

我有一个我使用的工具栏,并设置标题:

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

【问题讨论】:

  • 您是指以编程方式还是通过主题?
  • 这是stackoverflow.com/a/2285722/2149195回答的重复问题
  • @RaviKoradiya 对于旧版本的 Android,FWIW 这个答案已经过时了。
  • 这不是一个答案,而是一个信息。你不需要写 ((ActionBarActivity)getActivity()).getSupportActionBar().setTitle("Home");更改工具栏标题。只需写 setTitle(getString(R.string.title));就是这样

标签: android android-theme android-toolbar


【解决方案1】:

以编程方式:

toolbar.setTitleTextColor(0xFFFFFFFF);

【讨论】:

  • 支持api 23以上
  • 如果您使用的是 AppCompat 库,则不会。
  • 为我工作过:toolbar.setTitleTextColor(android.graphics.Color.WHITE); .. 谢谢!
  • 我们能否获得具有深色主题意识的现代答案?
【解决方案2】:

在应用程序基础主题中创建新样式

  <style name="custom_toolbar" parent="@style/Widget.AppCompat.Toolbar">
        <item name="titleTextColor">#replace with color</item>
  </style>

并使用工具栏的样式

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

【讨论】:

  • 注意“toolbarStyle”属性只有api 21+
【解决方案3】:

根据 AppCompat 的创建者 Theme vs Style blog postversion 21 of AppCompat 上的帖子,可以通过将 android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 添加到您的Toolbar的XML:

<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(两者都有效)?
  • AppCompat 22.1 之前,您必须使用app:theme - 如果您使用的版本晚于该版本(此时您应该使用该版本),那么是的,您应该使用android:theme到处。我更新了我的答案以反映当今的最佳做法。
【解决方案4】:

我知道希望上面有很多答案,它会对不理解上述答案的人有所帮助。

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. 在活动或片段中以编程方式。

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

【讨论】:

    【解决方案5】:

    如果您只想更改标题文本颜色, 试试这个..

    getSupportActionBar().setTitle(Html.fromHtml("&lt;font color='#746E66'&gt;"+titleText+"&lt;/font&gt;"));

    它有效..!!

    【讨论】:

      【解决方案6】:

      您可以通过扩展 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>
      

      【讨论】:

        【解决方案7】:

        它可以像上面的答案一样以编程方式进行更改。但是降低代码复杂度,你应该通过 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">
        

        【讨论】:

          【解决方案8】:

          在这里我使用下面的代码修复了它,它适用于每个 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>
          

          【讨论】:

            【解决方案9】:

            在 tachyonflux 上进行扩展,用 HEX 设置颜色

             toolbar.setTitleTextColor(Color.parseColor("#519c3f"));
            

            【讨论】:

              【解决方案10】:

              toolbar.setTitleTextColor(getResources().getColor(R.color.black));

              (工具栏是您在活动类中为工具栏指定的名称) (在您的颜色值 xml 中设置您想要的颜色并将其引用到您选择的颜色名称,如此处所示,我保留了一些主要颜色的正常名称) 我自己花了一段时间才弄清楚,但这是我让它工作的唯一方法,ThemEditor 应该允许这样做,但它就是这样。

              【讨论】:

                【解决方案11】:

                在xml中:

                app:titleTextColor="@color/White" 为

                <android.support.v7.widget.Toolbar
                    android:id="@+id/tb_top"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="?attr/colorPrimary"
                    android:minHeight="?attr/actionBarSize"
                    app:theme="@style/AppTheme.DarkToolbar"
                    app:titleTextColor="@color/White" />
                

                【讨论】:

                  【解决方案12】:

                  使用此代码

                  <android.support.v7.widget.Toolbar
                          android:id="@+id/toolbar"
                          app:titleTextColor="@color/colorAccent"
                          app:theme="@style/ToolbarColoredBackArrow"
                          app:subtitleTextColor="@color/colorAccent"
                          android:layout_width="match_parent"
                          android:layout_height="?attr/actionBarSize"
                          android:background="?attr/colorPrimary"
                          app:popupTheme="@style/AppTheme.PopupOverlay" />
                  

                  【讨论】:

                    【解决方案13】:

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

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

                    【讨论】:

                      【解决方案14】:

                      在 Kotlin 中,使用 Sandip 的答案:

                      with(getSupportActionBar()) {
                              val titleText: String = title.toString()
                              setTitle(Html.fromHtml("<font color='#746E66'>" + titleText + "</font>"))
                          }
                      

                      【讨论】:

                        【解决方案15】:

                        您可以使用以下代码以编程方式更改它。

                        toolbar.setTitleTextColor(android.graphics.Color.WHITE);
                        

                        【讨论】:

                          【解决方案16】:

                          在 android.support.v7.widget.Toolbar 内部,添加这一行:

                          local:titleTextColor="@color/the_color_you_want"
                          

                          【讨论】:

                            【解决方案17】:

                            我找到了相当简单的解决方案。

                            可以通过以下方式完成(通过 XML 或编程方式)。

                            第一个(XML解决方案):

                            <androidx.appcompat.widget.Toolbar
                                android:id="@+id/toolbar"
                                android:layout_width="match_parent"
                                android:layout_height="?attr/actionBarSize"
                                app:layout_scrollFlags="scroll|enterAlways"
                                app:popupTheme="@style/Theme.AppCompat.NoActionBar"
                                app:titleTextColor="@color/white" />
                            

                            第二(以编程方式):

                            val toolbar = findViewById<Toolbar>(R.id.toolbar)
                            toolbar.setTitleTextColor(Color.WHITE)
                            

                            第二种解决方案需要 21 以上的最低 SDK 版本,供您参考。

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2019-03-11
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-07-19
                              • 2020-05-09
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多