在strings.xml中更改颜色

Boh*_*end 41 android

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

例如我有:

  <string name="hello_world">Hello world!</string>
Run Code Online (Sandbox Code Playgroud)

我只是显示为红色和蓝色

感谢名单

Sil*_*uti 74

试试这个

对于红色,

<string name="hello_worldRed"><![CDATA[<b><font color=#FF0000>Hello world!</font></b>]]></string>
Run Code Online (Sandbox Code Playgroud)

对于蓝色,

<string name="hello_worldBlue"><![CDATA[<b><font color=#0000FF>Hello world!</font></b>]]></string>
Run Code Online (Sandbox Code Playgroud)

在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));
Run Code Online (Sandbox Code Playgroud)

  • 不要忘了用`&lt;/ font&gt;`关闭`&lt;font&gt;`标签。 (2认同)
  • 从 Android 7.0 开始,不推荐使用单参数 `fromHtml`。有关详细信息,请参阅 [链接](/sf/answers/2653357521/) 或 [docs](https://developer.android.com/reference/android/text/Html.html#FROM_HTML_MODE_COMPACT)。 (2认同)
  • 为什么我们不能在 `font color="@color/customBlue"` 中设置颜色 id? (2认同)

Dar*_*zer 28

对于那些想直接在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-->
Run Code Online (Sandbox Code Playgroud)

如你所见,有灰色,红色和绿色,有8个字符,前两个用于透明,另一个用于颜色.

This a description of color and transparency
#   FF               FF3B30    
    Opacity          Color
Run Code Online (Sandbox Code Playgroud)

注意:在文本中将颜色放在同一个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
Run Code Online (Sandbox Code Playgroud)

参考:了解Android中的颜色(6个字符)


更新:10/OCT/2016

这个功能兼容所有版本的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>
Run Code Online (Sandbox Code Playgroud)

函数从xml获得颜色与android 6.0及更高版本的验证

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

例:

TextView status = (TextView)findViewById(R.id.tvstatus);
status.setTextColor(getColorWrapper(myactivity.this,R.color.status_stop));
Run Code Online (Sandbox Code Playgroud)

参考:在Android 6.0 Marshmallow(API 23)上弃用了getColor(int id)


Ami*_*pta 20

如果你想支持的文本格式,从您的内部strings.xml文件,你必须躲避标签-或使用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>
Run Code Online (Sandbox Code Playgroud)

要么

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

  • 另外,我很困惑:CDATA为什么?这将*转义格式化标签,以便它们不做任何事情. (3认同)
  • 我没有按照原样打印标签 (2认同)

小智 14

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

为蓝色

<string name="hello_world"><font color='blue'>Hello world!</font></string>
Run Code Online (Sandbox Code Playgroud)

或红色

<string name="hello_world"><font color='red'>Hello world!</font></string>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,使用此方法的任何人都应该使用 [Resources.getText(id:)](https://developer.android.com/reference/kotlin/android/content/res/Resources#gettext) 方法来获取 String 而不是[Resources.getString(id:)](https://developer.android.com/reference/kotlin/android/content/res/Resources#getstring) 方法。前一种方法保留字符串中的任何富文本样式,而后者则不保留。 (5认同)

ryd*_*rz8 13

我会用a 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);
Run Code Online (Sandbox Code Playgroud)

或者你可以试试这个


Edw*_*alk 9

<string name="hello_world"><font fgcolor="red">Hello</font>
    </font fgcolor="blue">world!</font></string>
Run Code Online (Sandbox Code Playgroud)

但请注意,这仅适用于相对较短的内置颜色列表:浅绿色,黑色,蓝色,紫红色,绿色,灰色,石灰色,栗色,海军蓝色,橄榄色,紫色,红色,银色,蓝绿色,白色和黄色.有关使用任意颜色执行此操作的方法,请参阅/sf/answers/2215860531/.


Ibu*_*ngo 8

如果要更改string.xml文件内的字体颜色,可以尝试以下代码.

<resources>
   <string name="hello_world"><font fgcolor="#ffff0000">Hello world!</font></string>
</resources>
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我试过这个,但它似乎没有用 (7认同)

Jay*_*ara 5

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

<string name="color_as">Any Text<font fgcolor='#FF0000'> *Text 1* </font><font fgcolor='#ffc821'> *Text 2 * </font></string>
Run Code Online (Sandbox Code Playgroud)


Aur*_*bon 3

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

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


归档时间:

查看次数:

81459 次

最近记录:

6 年,3 月 前