4

嗨,我已经浏览了我能找到的所有不同的 linkify 教程,但它们都不起作用,这是我当前的代码:

final SpannableString s = new SpannableString("Please send any questions to email@fake.com");
            Linkify.addLinks(s, Linkify.EMAIL_ADDRESSES);
            AlertDialog.Builder builder = new AlertDialog.Builder(Activity.this);
            builder.setTitle("Warning!")
                   .setMessage(s)
                   .setCancelable(false)
                   .setPositiveButton("Accept", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {

                       }
                   })
                   .setNegativeButton("Decline", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                            Activity.this.finish();
                       }
                   }).show();

但是,当我实际运行该应用程序时,它会显示蓝色文本并带有下划线,就好像它已链接但选择文本不会提示打开电子邮件应用程序。我也尝试过使用 url,但浏览器无法正常工作,是否缺少某些东西?

谢谢你的帮助。

4

3 回答 3

17

为了clickable在对话框上有一个区域,您需要使用TextView(View) 并autoLink=all在布局文件中设置或setAutoLinkMask()从代码中调用方法。

final SpannableString s = new SpannableString("Please send any questions to email@fake.com");

//added a TextView       
final TextView tx1=new TextView(this);
tx1.setText(s);
tx1.setAutoLinkMask(RESULT_OK);
tx1.setMovementMethod(LinkMovementMethod.getInstance());

Linkify.addLinks(s, Linkify.EMAIL_ADDRESSES);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Warning!")
  .setCancelable(false)
  .setPositiveButton("Accept", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int id) {
       }
      })
  .setNegativeButton("Decline", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int id) {
               finish();
      }
     })
  .setView(tx1)
  .show();
于 2011-09-20T04:13:37.413 回答
0

或者,您可以重用TextView创建的。

AlertDialog.Builder builder;

builder.setMessage(R.string.yourMessage);

Dialog dialog = builder.create();
dialog.setOnShowListener(d -> {
    TextView text = dialog.getWindow().findViewById(android.R.id.message);
    text.setAutoLinkMask(Linkify.ALL);
    text.setMovementMethod(LinkMovementMethod.getInstance());
});
于 2020-07-26T14:12:23.827 回答
0

如果有帮助,这里是 Kotlin:

val s = SpannableString(getString(R.string.actions_list_info_button_body))
val tx1 = TextView(context!!)
tx1.text = s
tx1.autoLinkMask = RESULT_OK
tx1.movementMethod = LinkMovementMethod.getInstance()

其余的都是一样的。

结果可能看起来不太好,因此您可能还需要添加一些填充:

// Adjust Padding to dp
val scale: Float = resources.displayMetrics.density
val dpAsPixels: Int = (25 * scale + 0.5f).toInt()
text.setPadding(dpAsPixels,20,dpAsPixels,0)
于 2020-02-11T16:03:28.057 回答