如何设置新工具栏的标题颜色?

我正在使用新的 v7工具栏,但我实在想不出如何更改标题的颜色。我已经将 Toolbar 的@样式设置为在 styles.xml 中声明的样式,并使用 textColor 应用了 titleTextStyle。我错过了什么吗?我正在编写棒棒糖的代码,但目前正在测试一个 Kitkat 设备。

Xml

<resources>


<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>


<style name="ActionBar" parent="Theme.AppCompat">
<item name="android:background">@color/actionbar_background</item>
<item name="android:titleTextStyle">@style/ActionBar.TitleTextStyle</item>
</style>


<style name="ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/actionbar_title_text</item>
</style>


</resources>

Xml:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar_actionbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
style="@style/ActionBar"/>
177999 次浏览

选项1)快捷方式(只限工具栏)

由于 appcompat-v7-r23,您可以直接在 Toolbar或其样式上使用以下属性:

app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"

如果您的最小 SDK 是23,并且您使用本机 Toolbar,只需将名称空间前缀更改为 android

在 Java 中,你可以使用以下方法:

toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);

这些方法采用的颜色是 int 而不是颜色资源 ID!

选项2)重写工具栏样式和主题属性

布局/xxx.xml

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.MyApp.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
style="@style/Widget.MyApp.Toolbar.Solid"/>

Value/styles.xml

<style name="Widget.MyApp.Toolbar.Solid" parent="Widget.AppCompat.ActionBar">
<item name="android:background">@color/actionbar_color</item>
<item name="android:elevation" tools:ignore="NewApi">4dp</item>
<item name="titleTextAppearance">...</item>
</style>


<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
<!-- Parent theme sets colorControlNormal to textColorPrimary. -->
<item name="android:textColorPrimary">@color/actionbar_title_text</item>
</style>

救命! 我的图标也变了颜色!

@ PeterKnut 报道说这会影响溢出按钮、导航抽屉按钮和后退按钮的颜色。它还可以改变 SearchView的文本颜色。

关于图标颜色: colorControlNormal继承自

  • android:textColorPrimary黑色主题(白色对黑色)
  • android:textColorSecondary灯光主题(黑色对白色)

如果将其应用于 动作酒吧的主题,则可以自定义图标颜色。

<item name="colorControlNormal">#de000000</item>

Appcompat-v7到 r23中有一个 bug,它要求您也覆盖本机对应的代码,如下所示:

<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>

救命! 我的搜索视图一团糟!

注意: 此部分可能已过时。

由于您使用的搜索小部件由于某种原因使用不同的反向箭头(不视觉上,技术上)与 appcompat-v7包含的一个,您必须在 应用程序的主题中手动设置它。支持库的绘图工具正确着色。否则它将永远是白色的。

<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>

至于搜索视图文本... 没有简单的方法。在深入挖掘了它的源代码之后,我找到了一种获得文本视图的方法。我还没有测试这个,所以请让我知道在评论中,如果这不工作。

SearchView sv = ...; // get your search view instance in onCreateOptionsMenu
// prefix identifier with "android:" if you're using native SearchView
TextView tv = sv.findViewById(getResources().getIdentifier("id/search_src_text", null, null));
tv.setTextColor(Color.GREEN); // and of course specify your own color

额外奖励: 覆盖 ActionBar 样式和主题属性

对于默认的 action appat-v7操作栏,适当的样式应该是这样的:

<!-- ActionBar vs Toolbar. -->
<style name="Widget.MyApp.ActionBar.Solid" parent="Widget.AppCompat.ActionBar.Solid">
<item name="background">@color/actionbar_color</item> <!-- No prefix. -->
<item name="elevation">4dp</item> <!-- No prefix. -->
<item name="titleTextStyle">...</item> <!-- Style vs appearance. -->
</style>


<style name="Theme.MyApp" parent="Theme.AppCompat">
<item name="actionBarStyle">@style/Widget.MyApp.ActionBar.Solid</item>
<item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>

这里是我的解决方案,如果你只需要改变标题的颜色,而不是搜索小部件的文本颜色。

Layp/toolbar.xml

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:background="@color/toolbar_bg"
app:theme="@style/AppTheme.Toolbar"
app:titleTextAppearance="@style/AppTheme.Toolbar.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"/>

Value/themes.xml

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
</style>


<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
<!-- Customize color of navigation drawer icon and back arrow -->
<item name="colorControlNormal">@color/toolbar_icon</item>
</style>


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

以类似的方式,您还可以设置 subtitleText卖相。

如果您支持 API 23或更高版本,现在可以使用 TitleTextColor 属性设置工具栏的标题颜色。

Layp/toolbar.xml

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:titleTextColor="@color/colorPrimary"
/>

MyActivity.java

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar)
toolbar.setTitleTextColor(Color.WHITE);

这让我有一阵子很烦恼,我不喜欢所给出的任何答案,所以我查看了一下源代码,看看它是如何工作的。

分形扳手是在正确的道路上,但它可以使用以下的 API 23,而不必设置在工具栏上它的自我。

正如其他人所说,您可以使用

app:theme="@style/ActionBar"

在这个样式中,您可以设置标题文本的颜色

<item name="titleTextColor">#00f</item>

空气污染指数介乎23之前或23以上

<item name="android:titleTextColor">your colour</item>

完整的 xml

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
app:theme="@style/ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/>




<style name="ActionBar" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<item name="android:titleTextStyle">@style/ActionBarTextStyle</item>
<item name="titleTextColor">your colour</item>
<item name="android:background">#ff9900</item>
</style>

下面是可以为工具栏设置的所有属性

<declare-styleable name="Toolbar">
<attr name="titleTextAppearance" format="reference" />
<attr name="subtitleTextAppearance" format="reference" />
<attr name="title" />
<attr name="subtitle" />
<attr name="gravity" />
<attr name="titleMargins" format="dimension" />
<attr name="titleMarginStart" format="dimension" />
<attr name="titleMarginEnd" format="dimension" />
<attr name="titleMarginTop" format="dimension" />
<attr name="titleMarginBottom" format="dimension" />
<attr name="contentInsetStart" />
<attr name="contentInsetEnd" />
<attr name="contentInsetLeft" />
<attr name="contentInsetRight" />
<attr name="maxButtonHeight" format="dimension" />
<attr name="navigationButtonStyle" format="reference" />
<attr name="buttonGravity">
<!-- Push object to the top of its container, not changing its size. -->
<flag name="top" value="0x30" />
<!-- Push object to the bottom of its container, not changing its size. -->
<flag name="bottom" value="0x50" />
</attr>
<!-- Icon drawable to use for the collapse button. -->
<attr name="collapseIcon" format="reference" />
<!-- Text to set as the content description for the collapse button. -->
<attr name="collapseContentDescription" format="string" />
<!-- Reference to a theme that should be used to inflate popups
shown by widgets in the toolbar. -->
<attr name="popupTheme" format="reference" />
<!-- Icon drawable to use for the navigation button located at
the start of the toolbar. -->
<attr name="navigationIcon" format="reference" />
<!-- Text to set as the content description for the navigation button
located at the start of the toolbar. -->
<attr name="navigationContentDescription" format="string" />
<!-- Drawable to set as the logo that appears at the starting side of
the Toolbar, just after the navigation button. -->
<attr name="logo" />
<!-- A content description string to describe the appearance of the
associated logo image. -->
<attr name="logoDescription" format="string" />
<!-- A color to apply to the title string. -->
<attr name="titleTextColor" format="color" />
<!-- A color to apply to the subtitle string. -->
<attr name="subtitleTextColor" format="color" />
</declare-styleable>

在我的 android.support.v7.widget.Toolbar上设置 app:titleTextColor对我在 Android 4.4和 com.android.support:appcompat-v7:23.1.0上的6.0都适用:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:titleTextColor="@android:color/white" />

改变颜色

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"

/>

Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
myToolbar.setTitleTextColor(ContextCompat.getColor(getApplicationContext(), R.color.Auth_Background));
setSupportActionBar(myToolbar);
<?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="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">


<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:titleTextColor="@color/white"
android:background="@color/green" />

这招对我很管用

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_back"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:subtitleTextColor="@color/white"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="This week stats"
app:titleTextColor="@color/white">




<ImageView
android:id="@+id/submitEditNote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:layout_marginRight="10dp"
android:src="@android:drawable/ic_menu_manage" />
</android.support.v7.widget.Toolbar>

CollapsingToolbarLayout中改变 Toolbar标题颜色的最简单方法。

将以下样式添加到 CollapsingToolbarLayout

<android.support.design.widget.CollapsingToolbarLayout
app:collapsedTitleTextAppearance="@style/CollapsedAppBar"
app:expandedTitleTextAppearance="@style/ExpandedAppBar">

Xml

<style name="ExpandedAppBar" parent="@android:style/TextAppearance">
<item name="android:textSize">24sp</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:textAppearance">@style/TextAppearance.Lato.Bold</item>
</style>


<style name="CollapsedAppBar" parent="@android:style/TextAppearance">
<item name="android:textColor">@android:color/black</item>
<item name="android:textAppearance">@style/TextAppearance.Lato.Bold</item>
</style>

如果可以使用 Appcompat-v7应用程序: titleTextColor = “ # fff”>

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:visibility="gone"
app:titleTextColor="#fff">
</android.support.v7.widget.Toolbar>

在 xml... toolbar.xml 中创建一个工具栏:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"


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

然后在 toolbar.xml 中添加以下内容:

app:titleTextColor="@color/colorText"
app:title="@string/app_name">

Remeber@color/color Text 只是带有 color 属性的 color. xml 文件,名称为 cololText,属性为 color。这是调用字符串而不是在 toolbar.xml 中硬编码颜色的最佳方法。您还可以使用其他选项来修改您的文本,比如: text卖相... ... 等等。.只要输入 app: text... 智能感知将在 android 工作室中为您提供选项。

你的最终工具栏应该是这样的:

 <android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_weight="1"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/Theme.AppCompat"
app:subtitleTextAppearance="@drawable/icon"
app:title="@string/app_name">
</android.support.v7.widget.Toolbar>

注意: 这个工具栏应该在 activity _ main.xml. Easy Peacie 中

另一个选择是在你的课堂上完成:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitleTextColor(Color.WHITE);

祝你好运

public class MyToolbar extends android.support.v7.widget.Toolbar {


public MyToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}


@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
AppCompatTextView textView = (AppCompatTextView) getChildAt(0);
if (textView!=null) textView.setTextAppearance(getContext(), R.style.TitleStyle);
}

}

或者来自 MainActivity 的简单使用:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarMain);
setSupportActionBar(toolbar);
((AppCompatTextView) toolbar.getChildAt(0)).setTextAppearance(this, R.style.TitleStyle);

Xml

<style name="TileStyle" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/White</item>
<item name="android:shadowColor">@color/Black</item>
<item name="android:shadowDx">-1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
</style>

一起做 SetTitleText卖相(上下文,R.style. TitleTextStyle) ;

//这是您可以自定义配色方案的样式

 <style name="TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:fontFamily">@string/you_font_family</item>
<item name="android:textStyle">normal</item>
<item name="android:textAppearance">@style/you_text_style</item>
<item name="android:textColor">#000000</item>
<item name="android:textSize">20sp</item>
</style>

很简单,这对我很有用(标题和白色图标) :

    <android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/PrimaryColor"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:elevation="4dp" />

我今天花了几个小时来纠结这个问题,因为所有这些答案现在都有点过时了,MDC 和新的主题化功能让我看不到如何覆盖 app:titleTextColor应用程序的整体风格。

答案是,在 styles.xml 中可以使用 titleTextColor,因为您覆盖了从 Widget.AppCompat.Toolbar继承的内容。今天我认为最好的选择应该是 Widget.MaterialComponents.Toolbar:

<style name="Widget.LL.Toolbar" parent="@style/Widget.MaterialComponents.Toolbar">
<item name="titleTextAppearance">@style/TextAppearance.LL.Toolbar</item>
<item name="titleTextColor">@color/white</item>
<item name="android:background">?attr/colorSecondary</item>
</style>


<style name="TextAppearance.LL.Toolbar" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textStyle">bold</item>
</style>

在应用程序主题中,指定 toolbarStyle:

<item name="toolbarStyle">@style/Widget.LL.Toolbar</item>

现在可以保留指定工具栏的 xml 不变。很长一段时间,我认为改变 android:textColor在工具栏标题文本外观应该是工作,但出于某些原因它没有。

使用材料组件库,您可以使用 app:titleTextColor属性。

布局中,你可以使用如下代码:

<com.google.android.material.appbar.MaterialToolbar
app:titleTextColor="@color/...."
.../>

您还可以使用自定义 风格:

<com.google.android.material.appbar.MaterialToolbar
style="@style/MyToolbarStyle"
.../>

(扩展 Widget.MaterialComponents.Toolbar.Primary风格) :

  <style name="MyToolbarStyle" parent="Widget.MaterialComponents.Toolbar.Primary">
<item name="titleTextColor">@color/....</item>
</style>

或(扩展 Widget.MaterialComponents.Toolbar风格) :

  <style name="MyToolbarStyle" parent="Widget.MaterialComponents.Toolbar">
<item name="titleTextColor">@color/....</item>
</style>

enter image description here

您还可以使用 android:theme属性(使用 Widget.MaterialComponents.Toolbar.Primary样式)使用样式定义的颜色 重写:

    <com.google.android.material.appbar.MaterialToolbar
style="@style/Widget.MaterialComponents.Toolbar.Primary"
android:theme="@style/MyThemeOverlay_Toolbar"
/>

与:

  <style name="MyThemeOverlay_Toolbar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
<!-- This attributes is also used by navigation icon and overflow icon -->
<item name="colorOnPrimary">@color/...</item>
</style>

enter image description here

或(使用 Widget.MaterialComponents.Toolbar风格) :

    <com.google.android.material.appbar.MaterialToolbar
style="@style/Widget.MaterialComponents.Toolbar"
android:theme="@style/MyThemeOverlay_Toolbar2"

与:

  <style name="MyThemeOverlay_Toolbar3" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
<!-- This attributes is used by title -->
<item name="android:textColorPrimary">@color/white</item>


<!-- This attributes is used by navigation icon and overflow icon -->
<item name="colorOnPrimary">@color/secondaryColor</item>
</style>