【问题标题】:Change color inside strings.xml在 strings.xml 中更改颜色
【发布时间】:2026-02-22 09:10:01
【问题描述】:

我是 android 新手,想知道如何更改字符串标签中 strings.xml 文件中字体的颜色。

例如我有:

  <string name="hello_world">Hello world!</string>

我只想让它显示为红色和蓝色

感谢

【问题讨论】:

  • 这可能对某人有所帮助,尽管不推荐androidqq6
  • 您是否尝试更改编辑器(ide)显示的颜色或应用程序中的结果颜色?

标签: android


【解决方案1】:

这是在一个字符串中添加多种颜色的简单且最佳的方法。

<string name="color_as">Any Text<font fgcolor='#FF0000'> *Text 1* </font><font fgcolor='#ffc821'> *Text 2 * </font></string>

【讨论】:

    【解决方案2】:

    对于那些在 2021 年从谷歌搜索中来这里寻找答案的人 只需使用

    <string name="hello_world"><font color="#your_color_in_hexa"> Hello</font> world!</string>
    

    上面的代码将为文本的“Hello”部分着色

    【讨论】:

      【解决方案3】:

      对于那些想直接在String.xml中放入颜色并且不想使用颜色的人......

      例子

      <string name="status_stop"><font fgcolor='#FF8E8E93'>Stopped</font></string> <!--gray-->
      <string name="status_running"><font fgcolor='#FF4CD964'>Running</font></string> <!--green-->
      <string name="status_error"><font fgcolor='#FFFF3B30'>Error</font></string> <!--red-->
      

      如您所见,有灰色、红色和绿色,共有 8 个字符,前两个用于透明度,其他用于颜色。

      例子

      This a description of color and transparency
      #   FF               FF3B30    
          Opacity          Color
      

      注意:将颜色放在同一个string.xml中的文本在Android 6.0及更高版本中将不起作用

      不透明度表

      100% — FF
      99% — FC
      98% — FA
      97% — F7
      96% — F5
      95% — F2
      94% — F0
      93% — ED
      92% — EB
      91% — E8
      90% — E6
      89% — E3
      88% — E0
      87% — DE
      86% — DB
      85% — D9
      84% — D6
      83% — D4
      82% — D1
      81% — CF
      80% — CC
      79% — C9
      78% — C7
      77% — C4
      76% — C2
      75% — BF
      74% — BD
      73% — BA
      72% — B8
      71% — B5
      70% — B3
      69% — B0
      68% — AD
      67% — AB
      66% — A8
      65% — A6
      64% — A3
      63% — A1
      62% — 9E
      61% — 9C
      60% — 99
      59% — 96
      58% — 94
      57% — 91
      56% — 8F
      55% — 8C
      54% — 8A
      53% — 87
      52% — 85
      51% — 82
      50% — 80
      49% — 7D
      48% — 7A
      47% — 78
      46% — 75
      45% — 73
      44% — 70
      43% — 6E
      42% — 6B
      41% — 69
      40% — 66
      39% — 63
      38% — 61
      37% — 5E
      36% — 5C
      35% — 59
      34% — 57
      33% — 54
      32% — 52
      31% — 4F
      30% — 4D
      29% — 4A
      28% — 47
      27% — 45
      26% — 42
      25% — 40
      24% — 3D
      23% — 3B
      22% — 38
      21% — 36
      20% — 33
      19% — 30
      18% — 2E
      17% — 2B
      16% — 29
      15% — 26
      14% — 24
      13% — 21
      12% — 1F
      11% — 1C
      10% — 1A
      9% — 17
      8% — 14
      7% — 12
      6% — 0F
      5% — 0D
      4% — 0A
      3% — 08
      2% — 05
      1% — 03
      0% — 00
      

      参考:Understanding colors in Android (6 characters)


      更新:2016 年 10 月 10 日

      此功能兼容所有版本的android,我没有在android 7.0中测试过。使用此函数在 textview 中获取颜色和设置

      文件字符串和颜色中的示例格式 xml

      <!-- /res/values/strings.xml -->
      <string name="status_stop">Stopped</string>
      <string name="status_running">Running</string>
      <string name="status_error">Error</string>
      
      <!-- /res/values/colors.xml -->
      <color name="status_stop">#8E8E93</color>
      <color name="status_running">#4CD964</color>
      <color name="status_error">#FF3B30</color>
      

      通过 android 6.0 及更高版本验证从 xml 获取颜色的功能

      public static int getColorWrapper(Context context, int id) {
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//if actual version is >= 6.0
                  return context.getColor(id);
              } else {
                  //noinspection deprecation
                  return context.getResources().getColor(id);
              }
          }
      

      例子:

      TextView status = (TextView)findViewById(R.id.tvstatus);
      status.setTextColor(getColorWrapper(myactivity.this,R.color.status_stop));
      

      参考:getColor(int id) deprecated on Android 6.0 Marshmallow (API 23)

      【讨论】:

      【解决方案4】:

      试试这个

      对于红色,

      <string name="hello_worldRed"><![CDATA[<b><font color=#FF0000>Hello world!</font></b>]]></string>
      

      对于蓝色,

      <string name="hello_worldBlue"><![CDATA[<b><font color=#0000FF>Hello world!</font></b>]]></string>
      

      在java代码中,

      //red color text
      TextView redColorTextView = (TextView)findViewById(R.id.redText);
      String redString = getResources().getString(R.string.hello_worldRed)
      redColorTextView.setText(Html.fromHtml(redString));
      
      //Blue color text
      TextView blueColorTextView = (TextView)findViewById(R.id.blueText);
      String blueString = getResources().getString(R.string.hello_worldBlue)
      blueColorTextView.setText(Html.fromHtml(blueString));
      

      【讨论】:

      • 别忘了用&lt;/font&gt;关闭&lt;font&gt;标签。
      • 从 Android 7.0 开始,单参数 fromHtml 已弃用。请参阅linkdocs 了解更多信息。
      • 如果我们想改变部分字符串而不是完整字符串的颜色怎么办?
      【解决方案5】:

      按以下方式使用 CDATA 格式化您的文本

      <resources>
      <string name="app_name">DemoShareActionButton</string>
      <string name="intro_message">
          <b>
          <![CDATA[ This sample shows you how a provide a context-sensitive ShareActionProvider.
          ]]>
          </b>
          </string>
      

      只需在&lt;![CDATA[ 之前添加您想要的任何标签,您就会得到正确的输出。

      【讨论】:

        【解决方案6】:

        只需在字体标签之间添加文本:

        蓝色

        <string name="hello_world"><font color='blue'>Hello world!</font></string>
        

        或红色

        <string name="hello_world"><font color='red'>Hello world!</font></string>
        

        【讨论】:

        • 请注意,任何使用这种方法的人都应该使用Resources.getText(id:) 方法来获取字符串,而不是Resources.getString(id:) 方法。前一种方法在 String 中保留任何富文本样式,而后者则没有。
        • 此外,您可以使用十六进制颜色以及命名颜色。所以&lt;font color="#FF0000"&gt;Hello world!&lt;/font&gt;&lt;font color="red"&gt;Hello world!&lt;/font&gt; 一样有效。
        【解决方案7】:
        <string name="hello_world"><font fgcolor="red">Hello</font>
            </font fgcolor="blue">world!</font></string>
        

        但请注意,这只适用于相对较短的内置颜色列表:浅绿色、黑色、蓝色、紫红色、绿色、灰色、石灰、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色、和黄色。请参阅https://*.com/a/31655150/338479 了解使用任意颜色的方法。

        【讨论】:

          【解决方案8】:

          如果你想改变string.xml文件中的字体颜色,你可以试试下面的代码。

          <resources>
             <string name="hello_world"><font fgcolor="#ffff0000">Hello world!</font></string>
          </resources>
          

          【讨论】:

          • 它曾经工作过;它在 4.x 中中断。在*.com/a/11577658/338479 上查看 TWiStErRob 的解释和解决方法。
          【解决方案9】:

          我会使用SpannableString 来更改颜色。

          int colorBlue = getResources().getColor(R.color.blue);
              String text = getString(R.string.text);
              SpannableString spannable = new SpannableString(text);
              // here we set the color
              spannable.setSpan(new ForegroundColorSpan(colorBlue), 0, text.length(), 0);
          

          或者你可以试试this

          【讨论】:

          • 以防万一链接失效,这是red资源>
          【解决方案10】:

          如果您想在 strings.xml 文件中支持文本 formatting,则必须转义标签 - 或使用 CDATA 部分。否则 Android 会忽略他们在读取资源文件时。

          例如

          <string name="hello_world">
          <![CDATA[
          <p>This is a html-formatted string with <b>bold</b> and <i>italic</i> text</p>
          <p>This is another paragraph of the same string.</p>
          ]]>
          </string>
          

          String styledText = "This is <font color='red'>simple</font>.";
          textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
          

          【讨论】:

          • 感谢反馈,如果我想在 .xml 文件中更改应用程序的标签颜色,我该怎么做?
          • 你好 fgcolor="blue">世界!。但请注意,这只适用于相对较短的内置颜色列表:浅绿色、黑色、蓝色、紫红色、绿色、灰色、石灰、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色和黄色
          • 另外,我很困惑:为什么是 CDATA?这将转义格式化标签,因此它们不会做任何事情。
          • @B.shruti 它正在打印标签,因为您没有使用 Html.fromHtml 以编程方式将其解析为 Html ...检查 Silambarasan 答案
          【解决方案11】:

          您没有在strings.xml 类型的文件中设置此类属性。您需要在代码中设置它。或(这是更好的解决方案)使用您想要的颜色创建样式并应用于您的TextView

          【讨论】:

            【解决方案12】:

            你没有。 strings.xml 只是在这里定义原始文本消息。您应该(必须)使用styles.xml 定义可重用的视觉样式以应用于您的小部件。

            将其视为分离关注点的好习惯。您可以独立于文本消息处理视觉样式。

            【讨论】:

            • @user2042227 还考虑使用colors.xml 文件,以便您在一个地方定义所有颜色,并且只在@color/app_background等其他地方引用它们
            • 我个人不使用colors.xml,只使用styles.xml。这可能是 CSS 文件(在 HTML 中)和 XAML 自定义模板(在 WPF/WindowsPhone 中)的习惯。这个额外的文件不会分离关注点,但可以在不同的元素中重复使用相同的颜色。