【问题标题】:Clickable text link in Alert Dialog to open Activity警报对话框中的可单击文本链接以打开活动
【发布时间】:2020-08-06 03:27:41
【问题描述】:

我希望警报对话框中的一个单词可以点击并在点击时打开一个活动。

我尝试在 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();
    }
}

感谢您的帮助!

【问题讨论】:

    标签: java android android-activity dialog android-alertdialog


    【解决方案1】:

    好的,我在这里的其他几篇帖子和 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();
        }
    }
    

    希望我也能帮到你。

    【讨论】:

      【解决方案2】:

      首先,使用Html.fromHtml 使您的文本 HTML 链接可点击:

      .setMessage(Html.fromHtml(text))
      

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

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

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

      【讨论】:

      • 我试过了,但它只是显示为纯文本。我也点不了。有没有办法用 ClickableSpans 做到这一点?
      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多