如何使 MaterialAlertDialogBu​​ilder 中的 ClickableSpan 链接可点击?

Ami*_*ara 5 android android-alertdialog clickablespan spannablestringbuilder material-components

我有一个带有这样链接的SpannableStringBuilder对象,ClickableSpan

SpannableStringBuilder ssb = new SpannableStringBuilder("Hi StackOverflow!");

ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(@NonNull View widget) {
        Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
    }
};

ssb.setSpan(clickableSpan, 3, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

TextView当我将其设置为 a并使用后效果很好textView.setMovementMethod(LinkMovementMethod.getInstance())

当我将ssb对象设置为 时MaterialAlertDialogBuilder

new MaterialAlertDialogBuilder(this)
                .setTitle("My Dialog")
                .setMessage(ssb)
                .show();
Run Code Online (Sandbox Code Playgroud)

它显示为可点击的链接,但实际上无法点击它 MaterialAlertDialogBu​​ilder 预览 我找不到使用setMovementMethod中的消息的方法MaterialAlertDialogBuilder。有什么办法让它可以点击吗?

Bha*_*nik 5

这是使您的可跨内容可点击的代码片段,请尝试一下。

SpannableString s = new SpannableString(msg); // Here msg should have url to enable clicking
Linkify.addLinks(s, Linkify.ALL);
Run Code Online (Sandbox Code Playgroud)

之后将您的警报对话框代码放在这里

//Alert dialog code
Run Code Online (Sandbox Code Playgroud)

然后获取MaterialAlertDialog的textview的id,下面的代码行必须在dialog.show()之后调用,如下所示,

((TextView)dialog.findViewById(android.R.id.message))
.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)