2016-07-25 59 views
3

顯示在我的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

我認爲getString()方法在某種程度上刪除或清除了存儲在字符串資源中的所有格式化信息,當它返回結果時...所以我想問一個更好的問題是:是否有更好的方法可以在字符串資源中填充佔位符,同時保持格式化信息在那裏? –

回答

2

於是搜索了一天之後,我發現在Android開發者網站所需的答案!鏈接到頁面在這裏:https://developer.android.com/guide/topics/resources/string-resource.html

有時您可能想創建一個樣式文本資源,也可以用作格式字符串。通常,這將不起作用,因爲String.format(String,Object ...)方法將從字符串中去除所有樣式信息。解決此問題的方法是將帶有轉義實體的HTML標記寫入,然後在格式化後使用fromHtml(String)進行恢復。

Basicaly,那我會做基於我原來的問題的變化是與HTML標記爲,這是更換支架「<」 「& LT」 +「;」(將它們一起輸入到您的xml文件中!我必須將它們分開,因爲StackOverflow會將標籤作爲支架本身。)有關更詳細的解釋,請參閱使用HTML標記設置樣式。

1

您需要使用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>

+0

這不起作用 – BarmanInfo

+0

對不起,我試過這個,但沒有工作,謝謝回覆! –

+0

您需要將您的Html放入CDATA –

1

試試這個..

String myString = "This is a " + "<b>" + "your_string" + "</b>"; 
textview.setText(Html.fromHtml(myString)); 

更多看到here

+0

感謝您的回覆。我知道這在技術上應該工作,(通常我會使用這種方法),但在這種情況下,我必須使用getString()方法來填充存儲在字符串資源中的佔位符。 –

+0

嘗試直接在你的xml中設置 –

+0

這正是我在第一個地方所做的... 只是在getString()方法將我的字符串插入到佔位符後被清除。 –

0

這樣輸入下面

String boldText = "Hello"+"<b>" + "StackOverflow" + "</b>"; 
textView.setText(Html.fromHtml(boldText)); 

現在,您的文字是這樣的:你好StackOverflow上

參見本link

+0

嗨,我知道如何使用Html.fromHtml()...這只是我不想使用硬編碼的字符串,而是把我的字符串放在資源文件夾中,然後在代碼中填充佔位符(這是也是一個更好的編程習慣:)) –

-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; 
+0

感謝兄弟,至少你並沒有想過我甚至不知道Html ...這種方法雖然麻煩。我已經定義了我的字符串資源中應該是什麼樣的粗體,所以我猜最好的解決方案應該更多地展示我在屏幕上定義的 :) –