プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

【Android】 ダイアログでリンクを有効にする方法

TextViewでsetAutoLinkMaskを設定すれば、自動的にリンクが有効になります。

dialogで表示するテキストに対してリンクを張りたい場合は、TextViewを生成しsetAutoLinkMaskを設定し、そのViewをdialogに設定すればよいと思います。

サンプルコード

android 1.6 で試しています。

 

レイアウトファイルはボタンを一つだけ用意しておきます。

文字列リソースを下記のように定義します。

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="btn_caption">push me</string>
    <string name="title">dialog title</string>    
    <string name="text">これはサンプルで表示しているテキストです。http://www.mori-soft.com</string>
    
    <string name="app_name">DialogLinkSample</string>
</resources>

リソースID text で示される文字列中にURLが含まれています。これをダイアログで表示した際に、自動的にリンクが有効になります。

 

アクティビティを下記のようにします。

 

package com.mori_soft.android.dialoglinksample;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;

public class DialogLinkSample extends Activity {
    
    private static final int DIALOG_ID = 1;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                showDialog(DIALOG_ID);
            }
        });
    }
    
    @Override
    protected Dialog onCreateDialog(int id) {
        switch(id) {
        case DIALOG_ID:
            TextView tv = new TextView(this);
            tv.setAutoLinkMask(Linkify.WEB_URLS);
            String str = this.getString(R.string.text);
            tv.setText(str);

            ScrollView sv = new ScrollView(this);
            sv.addView(tv);

            AlertDialog.Builder builder = new AlertDialog.Builder(this)
            .setTitle(R.string.title)
            .setIcon(android.R.drawable.ic_menu_info_details)
            .setView(sv);

            return builder.create();            
        }
        return super.onCreateDialog(id);
    }
}

 

ボタンを押したら、ダイアログを表示します。

onCreateDialogでは、TextViewを動的に生成して、setAutoLinkMaskを設定します。ここでは、URLを有効にするために、Linkify.WEB_URLSを指定しました。設定する値によっては、電話番号などにリンクを張ることもできます。

なお、上記サンプルではスクロールビューにTextViewを設定し、スクロールビューをダイアログに設定しているので、テキストが長くなると自動的にスクロールが有効になるようにしています。

これを実行して、ボタンを押すと、

リンク付きダイアログ

のようにダイアログが表示され、URLの箇所が色が変わっていることがわかります。

ここで、リンクをクリックするとブラウザが立ち上がり、指定URLのサイトが開きます。

 

なお、この時ダイアログを表示しているアプリには、インターネットアクセスのパーミッションは与えていません。