Change color inside strings.xml

Android

Android Problem Overview


I am new to android, and would like to know how do I change the color of font inside the strings.xml file in a string tag.

for example I have:

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

I just want it to display as red and blue

thanx

Android Solutions


Solution 1 - Android

Try this

For red color,

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

For blue,

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

In java code,

//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));

Solution 2 - Android

For those who want to put color in String.xml directly and don't want to use color...

example

<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-->

as you see there is gray, red, and green, there is 8 characters, first two for transparency and other for color.

Example

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

> Note: Put color in text in the same string.xml will not work in Android 6.0 and above

Table of opacity

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

Reference: Understanding colors in Android (6 characters)


Update: 10/OCT/2016

This function is compatible with all version of android, I didn't test in android 7.0. Use this function to get color and set in textview

Example format xml in file string and colors

<!-- /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>

Function to get color from xml with validation for android 6.0 and above

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);
        }
    }

Example:

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

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

Solution 3 - Android

Just add your text between the font tags:

for blue color

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

or for red color

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

Solution 4 - Android

If you want to support text formatting from within your strings.xml file, you have to escape the tags – or use a CDATA section.. Otherwise Android simply ignores them when reading the resource file.

e.g

<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>

OR

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

Solution 5 - Android

I would use a SpannableString to change the color.

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);

OR you may try this

Solution 6 - Android

<string name="hello_world"><font fgcolor="red">Hello</font>
    </font fgcolor="blue">world!</font></string>

But note that this only works on a relatively short list of built-in colors: aqua, black, blue, fuchsia, green, grey, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow. See https://stackoverflow.com/a/31655150/338479 for a way to do it with arbitrary colors.

Solution 7 - Android

If you wish to change the font color inside string.xml file, you may try the following code.

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

Solution 8 - Android

You don't. strings.xml is just here to define the raw text messages. You should (must) use styles.xml to define reusable visual styles to apply to your widgets.

Think of it as a good practice to separate the concerns. You can work on the visual styles independently from the text messages.

Solution 9 - Android

This is the easy and the best way to add multiple colors in one string.

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

Solution 10 - Android

You do not set such attributes in strings.xml type of files. You need to set it in your code. or (which is better solution) create style with colors you want and apply to your TextView

Solution 11 - Android

Use CDATA in the below way for formatting your text

<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>

Just add any tag you want before the <![CDATA[ and you will get your proper output.

Solution 12 - Android

For those who have come here for the answers from searching in google at 2021 Just use

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

This above code will color the "Hello" part of the text

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBohrendView Question on Stackoverflow
Solution 1 - AndroidSilambarasan PoongutiView Answer on Stackoverflow
Solution 2 - AndroidDarckBlezzerView Answer on Stackoverflow
Solution 3 - AndroidOscar DuarteView Answer on Stackoverflow
Solution 4 - AndroidAmit GuptaView Answer on Stackoverflow
Solution 5 - AndroidAmreshView Answer on Stackoverflow
Solution 6 - AndroidEdward FalkView Answer on Stackoverflow
Solution 7 - AndroidIbungoView Answer on Stackoverflow
Solution 8 - AndroidAurelien RibonView Answer on Stackoverflow
Solution 9 - AndroidJayesh DankharaView Answer on Stackoverflow
Solution 10 - AndroidMarcin OrlowskiView Answer on Stackoverflow
Solution 11 - AndroidB.shrutiView Answer on Stackoverflow
Solution 12 - AndroidKhaled SaifullahView Answer on Stackoverflow