2015-05-06 91 views
2

我無法使AlertDialog中的文本顯示爲粗體或斜體。在AlertDialog.Builder中設置文本格式

我試過直接格式化,也使用CharSequence utilties from the Android string-resource page,但我總是得到純文本。
我在做什麼錯?

MyFragment.java

String idFormatted = String.format(resources.getString(R.string.id)); 
CharSequence idStyledText = Html.fromHtml(idFormatted); 

CharSequence nameItalic = Utilities.italic(resources.getString(R.string.name)); 

String typeFormatted = String.format(resources.getString(R.string.type)); 
CharSequence typeStyledText = Html.fromHtml(idFormatted); 

AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
builder.setPositiveButton("Dismiss", 
     new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }).setIcon(android.R.drawable.ic_dialog_info); 

builder.setMessage(idFormatted + myData.getId() + "\t\t" + nameItalic + myData.getName() + "\t\t" + typeFormatted + myData.getType()); 
Dialog dialog = builder.create(); 
dialog.setTitle("Details"); 
dialog.show();   

的strings.xml

<string name="id"><i>Id: </i></string> 
<string name="name"><i>Name: </i></string> 
<string name="type"><i>Type: </i></string> 

編輯:------------------------ -------------------------------------
Mohammad Arman建議string.xml中的字符串不會保留html。這似乎是真的,雖然我還不能證明它。

根據他和Farbod Salamat-Zadeh的回答,我嘗試了下面的代碼,但結果仍然是相同的,只是純文本。

Spanned idLabel = Html.fromHtml("<i>" + resources.getString(R.string.id) + "</i>"); 
Spanned nameLabel = Html.fromHtml("<i>" + resources.getString(R.string.name) + "</i>"); 
Spanned typeLabel = Html.fromHtml("<i>" + resources.getString(R.string.type) + "</i>"); 
... 
builder.setMessage(idLabel.toString() + myData.getId() + "\t\t" + nameLabel + myData.getName()); 

Edit2:----------------------------------------- ------------------
我試圖爲基蘭曾建議:

<string name="italic_string"><![CDATA[<i>italic-string</i>]]></string> 

然後:

String formattedText = getString(R.string.italic_string); 
Spanned result = Html.fromHtml(formattedText); 
builder.setMessage(result); 

這工作。

回答

1

You can't simply store HTML in a strings.xml file.你需要將它們放在CDATA,就像這樣:

<string name="id"><![CDATA[<i>Id: </i>]]></string> 

然後顯示一個格式化字符串,你仍然需要使用Html.fromHtml()

+0

感謝您的回覆。我剛剛嘗試了你的建議(請參閱編輯問題),但它沒有奏效。我是否正確實施了它? –

+0

注意你的答案中的鏈接,OP不想格式化文本,但顯示html標籤。我想格式化文本。 –

+0

@AlLelopath的問題是,當你從strings.xml中讀取時,你沒有得到HTML標籤。如果你使用cdata,你會*獲得完整的標籤。然後你用這根繩子做什麼取決於你。 *你*仍然想把它放在'Html.fromHtml()'中。是你做的嗎?你能否確切地告訴我你現在得到了什麼樣的行爲? - **編輯**:我看到你編輯了你的文章,非常好(很多人不這樣做,你太棒了!)。所以是的,嘗試'Html.fromHtml()',並請回報如果它的工作:) – Keelan

2

您可以在任何地方以粗體或斜體顯示文本 - 我使用以下內容;

Spanned italicText = Html.fromHtml("<i>" + "My italic text" + "</i>"); 
Spanned boldText = Html.fromHtml("<b>" + "My boldtext" + "</b>"); 
// You can use different HTML tags depending on what you want. 
+0

這些行不編譯:不兼容的類型:必需:java.lang.String找到:android.text.Spanned –

+0

嘗試使用'Spanned italicText'和'Spanned boldText'。 –

1

你需要在Java類(否則由於某種原因,它不會工作)單獨String變量格式化的HTML版本。

String myId = <i>Id: </i>; 
String myName = <b>Name: </b> 

然後,你必須在TextView中添加此類似波紋管:

textView1.setText(Html.fromHtml(myId +" "+ "1234"); 
textView2.setText(Html.fromHtml(myName +" "+ "Al Lelopath") 

爲什麼你的做法是行不通的

這是因爲當你導入從string.xml字符串它將失去該屬性並將其作爲純文本發送。這就是爲什麼Android不能將其視爲html的原因。

+0

我試着從字符串xml定義中移除html,但仍然是一樣的。請參閱編輯原始問題。 –

相關問題