android - 在 AlertDialog 中打开电子邮件客户端

标签 android android-alertdialog email-client spannablestring

我想在 AlertDialog 窗口中单击文本时打开电子邮件客户端。我使用了 Setspan 方法和 Linkify 但没有结果。这是我的代码:

SpannableString s = new SpannableString("contact");
s.setSpan(new URLSpan("http://www.google.com"), 0, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
final TextView tx1 = new TextView(this);
tx1.setText(getString(R.string.locerstatus) +s);
tx1.setAutoLinkMask(RESULT_OK);
tx1.setMovementMethod(LinkMovementMethod.getInstance());

Linkify.addLinks(s, Linkify.EMAIL_ADDRESSES);
AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setCancelable(false)
        .setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) { }
        })
        .setView(tx1).show();

最佳答案

尝试使用ClickableSpan像这样:

final TextView tx1 = new TextView(this);

tx1.setAutoLinkMask(RESULT_OK);
tx1.setMovementMethod(LinkMovementMethod.getInstance());

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setCancelable(false)
        .setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                    }
                })
        .setView(tx1);

final AlertDialog dialog = builder.create();

String sourceString = "This is test string with contact word";
String keyWord = "contact";
SpannableString spannableString = new SpannableString(sourceString);

ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("plain/text");
        intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
        intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
        intent.putExtra(Intent.EXTRA_TEXT, "mail body");
        startActivity(Intent.createChooser(intent, ""));
        dialog.dismiss();
    }
};
spannableString.setSpan(clickableSpan, sourceString.indexOf(keyWord), sourceString.indexOf(keyWord) + keyWord.length(), 0);

tx1.setText(spannableString);

dialog.show();

更新

如果您想更改可点击文本的颜色,您还应该重写 ClickableSpan()updateDrawState() 方法,如下所示:

ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("plain/text");
        intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
        intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
        intent.putExtra(Intent.EXTRA_TEXT, "mail body");
        startActivity(Intent.createChooser(intent, ""));
        dialog.dismiss();
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setColor(Color.BLUE);
        ds.setUnderlineText(true);
    }
};

关于android - 在 AlertDialog 中打开电子邮件客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386812/

相关文章:

关于 android_SDK_ROOT 的 Android studio 虚拟设备错误

android - 如何在 android 中使用 GridView 创建自定义警报对话框?

html-table - Lotus Notes 6.5 和 7,小 td 上不需要的空间

PHP 邮件客户端库

HTML mailto 主题和正文显示加号 (+) 而不是邮件客户端中的空格

android - HardwareRenderer createSurface 上的 IllegalStateException

android - 如何更改 ActionBar Tab 文本样式?

java - 未在 JMS listner 非 Activity 类 android 中获取应用程序上下文

java - Android:TextView 未显示所有字母

android - 自定义支持对话框 fragment 文本颜色错误