在 AlertDialog.Builder 中格式化文本
Format text in AlertDialog.Builder
我无法让 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());
编辑 2:---------------------------------------- --------------
我已经按照 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);
这有效。
您可以在任何地方获取以粗体或斜体显示的文本 - 我使用以下内容;
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.
您需要在 Java class 中的一个单独的 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.
You can't simply store HTML in a strings.xml file. 你需要将它们放在 CDATA 中,像这样:
<string name="id"><![CDATA[<i>Id: </i>]]></string>
那么要显示一个格式化的字符串,还需要用到Html.fromHtml()
。
我无法让 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());
编辑 2:---------------------------------------- --------------
我已经按照 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);
这有效。
您可以在任何地方获取以粗体或斜体显示的文本 - 我使用以下内容;
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.
您需要在 Java class 中的一个单独的 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.
You can't simply store HTML in a strings.xml file. 你需要将它们放在 CDATA 中,像这样:
<string name="id"><![CDATA[<i>Id: </i>]]></string>
那么要显示一个格式化的字符串,还需要用到Html.fromHtml()
。