如何在代码中更改操作栏标题颜色

jfo*_*ato 42 android android-actionbar

我无法以编程方式为v11及更高版本更改机器人动作栏标题颜色.我可以在xml中完成它,但需要在代码中动态更改它.我该怎么办呢?提前致谢.

adn*_*eal 81

ActionBar标题ID是隐藏的,或者换句话说,它的内部和访问它不能被通常所做的.您可以通过引用它Resources.getIdentifier,然后View.findViewById虽然.

获取action_bar_title的ID

int titleId = getResources().getIdentifier("action_bar_title", "id", "android");
Run Code Online (Sandbox Code Playgroud)

现在你可以使用ID了 TextView

TextView abTitle = (TextView) findViewById(titleId);
abTitle.setTextColor(colorId);
Run Code Online (Sandbox Code Playgroud)

  • 如果这不适合你,请确保使用`setTextColor(getResources().getColor(R.color.myColor))`而不是`setTextColor(R.color.myColor)`.在Android 4.0+上顺利运行. (4认同)

小智 75

您可以使用SpannableString和ForegroundColorSpan来设置标题的颜色

    Spannable text = new SpannableString(actionBar.getTitle());
    text.setSpan(new ForegroundColorSpan(Color.BLUE), 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    actionBar.setTitle(text);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的解决方案,依赖内部API(action_bar_title id)是一个坏主意,因为它可能会更改,恕不另行通知. (12认同)
  • 这是最好的答案.特别是在KitKat上使用v7 appcompat库FAILs on action_bar_title id解决方案.使用这个答案! (2认同)

Iva*_*anP 33

另一种方法是使用Html

getSupportActionBar().setTitle((Html.fromHtml("<font color=\"#FF4444\">" + getString(R.string.some_string) + "</font>")));
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是最具防弹性的答案. (2认同)
  • 这仍然是我设置它的最可靠方式. (2认同)

mat*_*ash 15

如果使用v7 appcompat库(使用r22测试),则可以调用替换操作栏setTitleTextColor()Toolbar对象以获取所有API级别.例如:

Toolbar actionBarToolbar = (Toolbar)activity.findViewById(R.id.action_bar);
if (actionBarToolbar != null)
    actionBarToolbar.setTitleTextColor(Color.RED);
Run Code Online (Sandbox Code Playgroud)


sal*_*and 9

如果您使用Sherlock Actionbar,您可以使用sherlock-actionbar-id获取支持的动作栏(Android 3.0以下)

int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");    
if ( 0 == titleId ) 
        titleId = com.actionbarsherlock.R.id.abs__action_bar_title;
Run Code Online (Sandbox Code Playgroud)

  • 当你只是想改变标题时,你可以这样做.但这个问题是要改变标题颜色. (2认同)