警报对话框未显示在strings.xml中定义的HTML

时间:2013-02-04 07:19:32

标签: java android eclipse textview android-alertdialog

请查看以下代码

的strings.xml

<string name="measurements_description"><html><font color="#FFFAF0">I want to have white color for the whole text. 
    <br/>This text comes in a new line<font color="red">This text is red </font>
    <br/>This is another line. Again, color is white </font></html></string>

male_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView 
            android:id="@+id/measurementsDescription"
            android:text="@string/measurements_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />
    </RelativeLayout>
</ScrollView>

Form.java (这属于主要布局activity_form)

public boolean onMenuItemSelected(int id, MenuItem item) {
    //Toast.makeText(this, item.getTitle(), Toast.LENGTH_LONG).show();

    TextView msg = new TextView(this);
    msg.setText("<html><u>Message</u></html>");

    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    //alertBuilder.setMessage("<html><u>Message</u></html>");
    alertBuilder.setTitle("Male Measurement Instructions");
    LayoutInflater li = getLayoutInflater();
    View v = li.inflate(R.layout.male_layout, null);

    alertBuilder.setView(v);
    alertBuilder.setCancelable(false);
    alertBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface arg0, int arg1) {
             //alertBuilder.finish();
        }
    });

    AlertDialog alertDialog = alertBuilder.create();
    alertDialog.show();

    return true;
}

这是它如何显示,而不响应string.xml文件中的任何HTML。为什么这不会改变它在HTML中编码的颜色?为什么不按HTML编码保留换行符?

enter image description here

如何解决这个问题?请帮忙!

3 个答案:

答案 0 :(得分:3)

第一个问题是嵌套<font>。如果您在其他<font>内有<font>,则无效。您可以将android:textColor属性设置为#FFFFFF,然后使用<font>更改某些文字的颜色。其次,你必须在你的字符串中使用CDATA,第三,你必须从代码中设置TextView的文本,这样你就可以用html格式化字符串。所以你必须

<强> male_layout.xml

...
<TextView 
    android:id="@+id/measurementsDescription"

    android:textColor="#FFFFFF"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
/>
...

<强>的strings.xml

<string name="measurements_description">
<![CDATA[
    I want to have white color for the whole text. 
    <br/>This text comes in a new line <font color="red">This text is red </font>
    <br/>This is another line. Again, color is white
]]>    
</string>

<强> Form.java

...
String html = getString(R.string.measurements_description);
TextView tv = (TextView) findViewById(R.id.measurementsDescription);
tv.setText(Html.fromHtml(html));
...

答案 1 :(得分:1)

Android Documentation表示<b>仅支持少数HTML代码(包括<i><u>TextView)。

如果您想要显示不同颜色的单词,请使用SpannableString

完整示例here

希望它有所帮助。

修改

其他方法:

String text = "<font color=#cc0029>Erste Farbe</font> <font color=#ffcc00>zweite Farbe</font>";
yourtextview.setText(Html.fromHtml(text));

答案 2 :(得分:0)

您可以使用 HTML格式字符串,在 strings.xml 中声明字符串:

<string name="key">
    <![CDATA[
    My text and tags <b>with or without</b> variables<br/><br/>
    Answer is <u>%1$s</u>
    ]]>
</string>

创建对话框:

String msg = String.format(getResources().getString(R.string.key), "42");
Spanned htmlMsg = Html.fromHtml(msg);
builder.setMessage(htmlMsg).show();