(Android)更改strings.xml中的文本颜色

时间:2015-07-17 16:22:26

标签: java android xml string android-resources

首先,根据用户的操作,我想从strings.xml资源文件中检索某些字符串:

String option1 = context.getString(R.string.string_one)
String option2 = context.getString(R.string.string_two)
String option3 = context.getString(R.string.string_three)

然后,我将这些字符串String[] options传递给adapter的自定义ListView 我在哪里设置了TextView

的文本
    public ChoicesAdapter(Context context, String[] options) {
         super(context, R.layout.choice_option_layout_2,choices);
    }



 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater MyInflater = LayoutInflater.from(getContext());
        View MyView = MyInflater.inflate(R.layout.option_list_layout, parent, false);

        String option = getItem(position);
        TextView textView = (TextView) MyView.findViewById(R.id.textView);

        textView.setText(Html.fromHtml(option));

        return MyView;
    }

我希望strings.xml文件中的不同字符串具有不同的颜色或不同的格式。例如,这是我的一个字符串:

 <string name ="exit"><![CDATA[<i>exit</i>]]></string>

但是,当此字符串显示在屏幕上时,它显示为:"<i>exit</i>"

所以,我在我的方法中某处猜测我丢失了string.xml资源的格式。我怎样才能得到它而不是显示"<i>exit</i>",它将显示&#34; 退出&#34;在屏幕上?

我在想我的问题是我使用.getString()的地方。这是否忽略了我在.xml文件中添加到它的格式?

2 个答案:

答案 0 :(得分:2)

结帐http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling - 他们的例子是:

<string name="welcome">Welcome to <b>Android</b>!</string>

它表示您可以将<b>text</b>用于粗体文本,将<i>text</i>用于斜体文本,将<u>text</u>用于带下划线的文本。

这一点的重要部分是,&#34;通常,这不会起作用,因为String.format(String, Object...)方法将从字符串中删除所有样式信息。解决这个问题的方法是使用转义实体编写HTML标记,然后在格式化后使用fromHtml(String)恢复。&#34;

他们说&#34;将样式化的文本资源存储为HTML转义字符串&#34;像

 <string name="exit">&lt;i>exit&lt;/i></string>

然后使用:

Resources res = getResources();
String text = String.format(res.getString(R.string.exit));
CharSequence styledText = Html.fromHtml(text);

正确获取格式化文本。

答案 1 :(得分:2)

您是否只是尝试将String读入Spannable?

// Use a spannable to keep formatting
Spannable mySpannable = Html.fromHtml(context.getString(R.string.string_one));
textView.setText(mySpannable);