如何在自定义对话框中向文本添加超链接?

时间:2018-09-01 19:38:55

标签: android hyperlink dialog textview alertdialog

我有一个自定义对话框,里面有一个Textview。我想向文本添加超链接。我尝试使用setMovementMethod(LinkMovementMethod.getInstance()),但仍然无法正常工作。但是,当我将其应用于不在自定义对话框中的textview时,它会起作用。

这是我的对话框。

final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(true);
    dialog.setContentView(R.layout.license_dialog_layout);

    TextView text = dialog.findViewById(R.id.text_dialog);

    String str = "Link";
    text.setText(context.getResources().getString(R.string.my_link, str));

    dialog.show();
    text.setMovementMethod(LinkMovementMethod.getInstance());

我的字符串资源:

<string name="my_link"><a href="https://www.google.com/">%1$s</a></string>

Xml:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="web"
    android:id="@+id/text_dialog" />

3 个答案:

答案 0 :(得分:0)

使用此行:

text.setText(Html.fromHtml(context.getResources().getString(R.string.my_link)));

答案 1 :(得分:0)

尝试移动您的text.setMovementMethod(LinkMovementMethod.getInstance());dialog.show();之前,

由于在string.xml中定义了html文本,请尝试按以下方式获取它,然后将其设置为textview。

mTextView.setText(getText(R.string.my_styled_text));

这将使用样式而不是getString()的字符串来拾取文本,因此您将不需要Html.fromHtml()

注意:-getString()可能要求您将字符串包含在CDDATA中,例如:-

<string name="foo"><![CDATA[<a href="https://www.google.com/">Link</a>]]></string>

答案 2 :(得分:0)

最后解决了。遗漏了2件事。

首先,我必须将字符串封装在CDATA中,如下所示:

<string name="my_link"><![CDATA[<a href="https://www.google.com/">%1$s</a>]]></string>

然后我刚刚更改了这一行:

text.setText(Html.fromHtml(getResources().getString(R.string.my_link, str)));