You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AppCompat样式在代码中修改ActionBar标题颜色?

解决ActionBar标题颜色修改问题

嘿,我来帮你搞定这个ActionBar标题颜色的事儿!先给你说代码修改的方案,再解释为啥你之前XML里改不了~

一、用代码动态修改ActionBar标题颜色

因为你的主题是Theme.AppCompat.Light.DarkActionBar,记得要用getSupportActionBar()(而不是原生的getActionBar())来操作,下面给你两种常用方法:

方法1:用SpannableString设置颜色

这是最简单的方式,不需要额外布局:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        // 把标题转成SpannableString,给它设置颜色
        SpannableString spannableTitle = new SpannableString(actionBar.getTitle());
        // 这里换成你想要的颜色,比如Color.GREEN或者自定义色值
        spannableTitle.setSpan(new ForegroundColorSpan(Color.RED), 
                               0, 
                               spannableTitle.length(), 
                               Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        actionBar.setTitle(spannableTitle);
    }
}

如果你用Kotlin的话,代码更简洁:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    supportActionBar?.let { actionBar ->
        val spannableTitle = SpannableString(actionBar.title)
        spannableTitle.setSpan(ForegroundColorSpan(Color.RED), 0, spannableTitle.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
        actionBar.title = spannableTitle
    }
}

方法2:自定义ActionBar布局(更灵活)

如果需要更复杂的标题样式(比如加图标、调整字体大小),可以自定义布局:

  1. 先创建res/layout/custom_actionbar.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_actionbar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:textStyle="bold"
    android:textColor="#FF0000" <!-- 这里可以先设默认色,也能代码动态改 -->
    android:layout_gravity="center"/>
  1. 然后在Activity里设置自定义ActionBar:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        // 关闭默认标题,启用自定义布局
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);
        
        LayoutInflater inflater = LayoutInflater.from(this);
        View customActionBarView = inflater.inflate(R.layout.custom_actionbar, null);
        TextView titleTv = customActionBarView.findViewById(R.id.tv_actionbar_title);
        
        // 设置标题文本和颜色
        titleTv.setText("我的自定义标题");
        titleTv.setTextColor(Color.BLUE); // 动态改颜色
        
        actionBar.setCustomView(customActionBarView);
    }
}

二、为啥你之前XML里修改没生效?

看你的AppTheme里设置了android:textColorPrimary,但这个属性不会直接影响ActionBar的标题颜色——因为你用的是Theme.AppCompat.Light.DarkActionBar,这个主题的ActionBar本身用的是一个子主题(ThemeOverlay.AppCompat.Dark.ActionBar),标题颜色是由这个子主题里的titleTextColor控制的。

如果想在XML里直接修改ActionBar标题颜色,需要给主题添加actionBarTheme属性:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">#3f51b5</item>
    <item name="colorPrimary">#3f51b5</item>
    <!-- 添加这个属性,指定ActionBar的子主题 -->
    <item name="actionBarTheme">@style/CustomActionBarTheme</item>
</style>

<!-- 自定义ActionBar的子主题 -->
<style name="CustomActionBarTheme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <!-- 兼容Android原生和AppCompat库,两个属性都加上 -->
    <item name="android:titleTextColor">#FF0000</item>
    <item name="titleTextColor">#FF0000</item>
</style>

这样设置后,ActionBar的标题颜色就会变成你指定的红色啦~

内容的提问来源于stack exchange,提问作者Artur A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:51:56