在AlertDialog.Builder中格式化文本

时间:2015-05-06 19:21:19

标签: android android-dialog

我无法在AlertDialog中获取文本以粗体或斜体显示。

我已尝试直接格式化并使用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:--------------------------------------------- --------------
我已经尝试过Keelan的建议:

<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);

这很有效。

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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的原因。

答案 2 :(得分:1)

You can't simply store HTML in a strings.xml file.您需要将它们放入CDATA中,如下所示:

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

然后要显示格式化字符串,您仍需要使用Html.fromHtml()