string.xml中的粗体字符未显示在屏幕上

时间:2016-07-25 14:01:44

标签: android xml string-formatting

在我的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()存在,请不要回复......

6 个答案:

答案 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。它似乎保持样式。

from the docs:

  

您可以使用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;