警报对话框中的可单击文本 link 可打开 Activity

Clickable text link in Alert Dialog to open Activity

我希望我的警报对话框中的文本中的一个词可以单击并在单击时打开 activity。

我尝试在 SpannableString 中使用 ClickableSpan,但根本无法识别点击...

public class TestDialog extends AppCompatDialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String text = "This is a test message.";

        SpannableString ss = new SpannableString(text);

        ClickableSpan cs = new ClickableSpan() {
            @Override
            public void onClick(@NonNull View view) {
                System.out.println("Test");
            }
        };

        ss.setSpan(cs, 10, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(ss)
                .setTitle("Test Title")
                .setPositiveButton("Ok!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                })
                .setNegativeButton("No!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                });

        return builder.create();
    }
}

感谢您的帮助!

首先,使用 Html.fromHtml:

使您的文本 HTML 链接可点击
.setMessage(Html.fromHtml(text))

并且,将此行添加到清单中的 Activity:

<data android:host="my.app" android:scheme="http"></data>

然后,http://my.app 应该会启动您的 activity。

好的,我是在其他几篇文章和 youtube 视频的帮助下完成的。 我使用自定义布局显示文本和可点击范围,然后在警报对话框中显示:

public class TestDialog extends AppCompatDialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String text = "This is a test message.";

        SpannableString ss = new SpannableString(text);

        ClickableSpan cs = new ClickableSpan() {
            @Override
            public void onClick(@NonNull View view) {
                Intent testIntent = new Intent(getContext(), Test.class);
                getContext().startActivity(testIntent);
            }
        };

        ss.setSpan(cs, 10, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.test_view, null);

        TextView message = (TextView) view.findViewById(R.id.textView);
        message.setMovementMethod(LinkMovementMethod.getInstance());
        message.setText(ss);

        builder.setView(view)
                .setTitle("Test Title")
                .setPositiveButton("Ok!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                })
                .setNegativeButton("No!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                });

        return builder.create();
    }
}

希望我也能帮到你