Android 字体标记为的字符串资源不工作

Android 字体标记为的字符串资源不工作,android,html,string,Android,Html,String,我需要帮助显示从下一个字符串资源到文本视图的颜色 <string name="colored"> <b>Something working perfectly</b> <font color="#F38">Something that doesn't work</font> </string> <TextView android:layout_width="wrap_content" android:

我需要帮助显示从下一个字符串资源到文本视图的颜色

<string name="colored">
  <b>Something working perfectly</b>
  <font color="#F38">Something that doesn't work</font>
</string>

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/colored"
/>

完美工作的东西
不起作用的东西

您必须以编程方式进行设置,如下所示:

((TextView)findViewById(R.id.yourTextViewId)).setText(Html.fromHtml(getResources().getString(R.string. colored)));
XML:


string.xml:

<string name="colored"><![CDATA[
  <b>Something working perfectly</b>
  <font color="#F38">Something that doesn't work</font>
]]></string>
工作正常的东西
不起作用的东西
]]>

为什么不在资源文件中定义一种颜色,然后在布局文件中使用它呢

可以通过在colors.xml文件(位于values文件夹中)上定义以下内容来实现:


字体颜色标签在Android的字符串资源中无法正常工作。这是因为解析格式为“#AARRGGBB”的颜色时出现错误。它使用Integer.parseInt(源代码,16)来解析它(在com.android.internal.util.XmlUtils.convertValueToInt()方法中),它只接受带符号的int(因此可以使用从#7fffffffff到#-7FFFFFFF的范围)。 基本上,使用Long.parse()替换Color.parse(),然后从中生成整数

此外,您不能使用自己的颜色资源作为字符串中字体颜色的引用,因为它使用System.getResources()方法查找颜色资源。所以只有“android:color/[colorname]”可以工作

总之,在字体标记中,您可以:

  • 使用Android系统颜色作为参考,如
    Hello world
  • 使用基本颜色,如
    Hello world
  • 使用带符号整数很痛苦,因为您需要将负值转换为不明显的格式,如
    Hello world其中#-0000FF00类似于#FFFF0100
  • 在运行时使用Html.fromHtml()方法解析用CDATA标记包装的类似Html的字符串,如
    Hello world!]]>
  • <string name="colored"><![CDATA[
      <b>Something working perfectly</b>
      <font color="#F38">Something that doesn't work</font>
    ]]></string>
    
    <color name="black">#000000</color> 
    
    android:textColor="@color/black"