问题描述
首先,根据用户的操作,我想从我的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
传递到ListView
的自定义adapter
,在其中设置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资源的格式。
" on the screen? 如何获得它,而不是在屏幕上显示“
”而不是显示"<i>exit</i>"
?
我在想我的问题是在哪里使用.getString()
。
这是否以某种方式忽略了我在.xml文件中添加的格式?
1楼
查看其示例为:
<string name="welcome">Welcome to <b>Android</b>!</string>
它说您可以将<b>text</b>
用于粗体文本,将<i>text</i>
用于斜体文本,将<u>text</u>
用于带下划线的文本。
这样做的重要部分是,“通常,这将不起作用,因为String.format(String, Object...)
方法将从字符串中剥离所有样式信息。解决方法是编写HTML带有转义的实体的标签,然后在格式化后使用fromHtml(String)
恢复。”
他们说“将样式化的文本资源存储为HTML转义的字符串”,例如
<string name="exit"><i>exit</i></string>
然后使用:
Resources res = getResources();
String text = String.format(res.getString(R.string.exit));
CharSequence styledText = Html.fromHtml(text);
正确获取格式化的文本。
2楼
您只是尝试将String读为Spannable吗?
// Use a spannable to keep formatting
Spannable mySpannable = Html.fromHtml(context.getString(R.string.string_one));
textView.setText(mySpannable);