设置操作栏标题颜色时,不推荐使用Html.fromHtml

时间:2016-08-18 23:19:49

标签: java android android-studio android-actionbar

将目标SDK版本更新为24.0.0后,fromHtml变为strikethroughed,并返回弃用警告。在设置操作栏的标题时,需要更改哪些内容才能解决此错误?

最低API为17

actionBar.setTitle(Html.fromHtml("<font color='#FFFFFF'>" + getResources().getString(R.string.welcome) + "</font>"));
  

&#39; fromHtml(java.lang.String中)&#39;已弃用

enter image description here

2 个答案:

答案 0 :(得分:2)

如果minSdkVersion为24或更高,请使用the version of fromHtml() that takes some flags as a parameter。 AFAIK,FROM_HTML_MODE_LEGACY将是用于与较旧的无标记fromHtml()兼容的标志值。

如果minSdkVersion低于24,则您的选择是:

  • 始终使用fromHtml(),可能使用快速修复( Alt-Enter )来取消Lint警告

  • 同时使用fromHtml()的两个版本:如果您的应用在API Level 24+设备上运行,则会带有标记,或者在旧设备上没有标记的那个

后者看起来像:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.N) {
  actionBar.setTitle(Html.fromHtml(..., Html.FROM_HTML_MODE_LEGACY));
}
else {
  actionBar.setTitle(Html.fromHtml(...));
}

(其中...是您要转换的HTML)

但请注意,如果您只是尝试更改整个操作栏标题的颜色,请使用Sandro Machado's solutionHtml.fromHtml()和类似的基于Spanned的解决方案适用于单个TextView内的不同文本(或使用TextView的内容)需要不同颜色的情况,例如行动吧)。

答案 1 :(得分:2)

您应该使用其他方法。

如果您使用工具栏:

Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);

风格:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
  </style>

  <style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
  </style>

  <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@color/red</item>
  </style>
</resources>

在此处查找更多方式:ActionBar text color