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あり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

役立つ場合に備えて、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 に答える
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 に答える