在我的string.xml文件中,我有类似这样的内容:
<string name="example_string"><b>This</b> is a <b>%1$s</b></string>
然后我将它放入TextView:
textView.setText(getString(R.string.example_string, "good question"));
我传递给getString()
方法的“好问题”参数未在粗体中显示。甚至“This”这个词也没有以粗体显示!
这是什么原因以及如何解决?
=============================================== ==========================
我知道如何使用Html.fromHtml(),但此方法不支持将字符串插入到我在字符串资源中定义的占位符。如果您试图告诉我Html.fromHtml()存在,请不要回复......
答案 0 :(得分:11)
经过一天的搜索,我在Android开发者网站上找到了理想的答案!该页面的链接位于:https://developer.android.com/guide/topics/resources/string-resource.html
有时您可能想要创建一个也用作格式字符串的样式化文本资源。通常情况下,这不会起作用,因为String.format(String,Object ...)方法将从字符串中删除所有样式信息。解决这个问题的方法是使用转义实体编写HTML标记,然后在格式化后使用fromHtml(String)恢复。
基本上,我根据原来的问题做出的改变是更换括号&#34;&lt;&#34;使用HTML标记,即&#34;&amp; lt&#34; +&#34;;&#34; (在xml文件中一起输入它们!我必须将它们分开,因为StackOverflow会将标记显示为括号本身。)有关详细说明,请参阅我在上面发布的网站上使用HTML标记样式部分。
答案 1 :(得分:2)
您需要使用Html.fromHtml或使用SpannableString格式化文字。
Html.fromHtml
示例:
textView.setText(Html.fromHtml(getString(R.string.example_string, "good question")));
修改强>
如果您在传递代码时遇到问题,则需要通过CDATA
进行转义。
例如。 <string name="example_string">This is a <![CDATA[<b>%1$s</b>]]></string>
答案 2 :(得分:1)
试试这个..
String myString = "This is a " + "<b>" + "your_string" + "</b>";
textview.setText(Html.fromHtml(myString));
了解更多信息,请参阅here
答案 3 :(得分:0)
请执行以下操作
String boldText = "Hello"+"<b>" + "StackOverflow" + "</b>";
textView.setText(Html.fromHtml(boldText));
现在您的文字如下所示:Hello StackOverflow
请参阅此link
答案 4 :(得分:0)
我成功使用getText instead of getString。它似乎保持样式。
您可以使用getString(int)或getText(int)来检索 串。 getText(int)保留应用于的任何富文本样式 字符串。
答案 5 :(得分:-1)
use this... it will working.
/**
* Makes a substring of a string bold.
* @param text Full text
* @param textToBold Text you want to make bold
* @return String with bold substring
*/
public static SpannableStringBuilder makeSectionOfTextBold(String text, String textToBold){
SpannableStringBuilder builder=new SpannableStringBuilder();
if(textToBold.length() > 0 && !textToBold.trim().equals("")){
//for counting start/end indexes
String testText = text.toLowerCase(Locale.US);
String testTextToBold = textToBold.toLowerCase(Locale.US);
int startingIndex = testText.indexOf(testTextToBold);
int endingIndex = startingIndex + testTextToBold.length();
//for counting start/end indexes
if(startingIndex < 0 || endingIndex <0){
return builder.append(text);
}
else if(startingIndex >= 0 && endingIndex >=0){
builder.append(text);
builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
}
}else{
return builder.append(text);
}
return builder;