将警报对话框的部分文本链接到一个活动。

问题描述 投票:0回答:1

我已经能够显示一个带有文本信息的AlertDialog。但是,文本中的一个词应该是可点击的,并且是指向另一个活动的链接。

我尝试用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) {
                        System.exit(0);
                    }
                });

        return builder.create();
    }
}

谢谢你的帮助

java android android-activity dialog android-alertdialog
1个回答
0
投票

首先,让你的HTML文本链接可以点击,使用的是 Html.fromHtml:

.setMessage(Html.fromHtml(text))

并且,在Manifest中把这一行添加到你的活动中。

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

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


0
投票

好吧,我是在其他几个帖子和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 test_intent = new Intent(getContext(), Test.class);
                getContext().startActivity(test_intent);
            }
        };

        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.testview, null);

        TextView message = (TextView) view.findViewById(R.id.textView);
        message.setMovementMethod(LinkMovementMethod.getInstance());
        message.setPadding(32, 32, 32, 32);
        message.setGravity(Gravity.CENTER_HORIZONTAL);
        message.setText(ss);
        message.setTextSize(16);

        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();
    }
}

我希望我也能帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.