【问题标题】:Android Linkify text in dialogAndroid Linkify 对话框中的文本
【发布时间】:2011-09-20 03:34:06
【问题描述】:

您好,我已经浏览了我能找到的所有不同的 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,但浏览器无法正常工作,是否缺少某些内容?

感谢您的帮助。

【问题讨论】:

    标签: java android email url linkify


    【解决方案1】:

    为了在对话框中有一个clickable 区域,您需要使用TextView(视图)并在布局文件中设置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();
    

    【讨论】:

      【解决方案2】:

      这里是 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)
      

      【讨论】:

        【解决方案3】:

        或者,您可以重复使用创建的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());
        });
        

        【讨论】:

          猜你喜欢
          • 2011-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-05
          • 1970-01-01
          • 1970-01-01
          • 2016-01-18
          • 1970-01-01
          相关资源
          最近更新 更多