2012年5月1日火曜日

Dialog (横幅を広げる)

Dialogでメッセージを表示させると、横幅いっぱいに表示しようとしたのにメッセージの長さ程度の幅のダイアログになってしまいました。今回はダイアログの横幅を広げます。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <Button
        android:id="@+id/normal_dialog_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Normal Dialog"
        />
    <Button
        android:id="@+id/wide_dialog_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Wide Dialog"
    />
</LinearLayout>
ボタンを2つ用意しています。「Normal Dialog」は普通にダイアログを表示して、「Wide Dialog」は横幅を広げてダイアログを表示するボタンです。

dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="THE QUICK BROWN FOX"
    />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="JUMPS OVER LAZY DOG"
    />
</LinearLayout>
ダイアログの内容は「THE QUICK BROWN FOX」「JUMPS OVER THE LAZY DOG」の2行です。

DialogTest2aActivity.java
package jp.co.triware.samples.DialogTest2a;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class DialogTest2aActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ((Button)findViewById(R.id.normal_dialog_btn)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openDialog(false);
            }
        });

        ((Button)findViewById(R.id.wide_dialog_btn)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openDialog(true);
            }
        });
    }

    private void openDialog(boolean bWide) {
        Dialog dlg = new Dialog(DialogTest2aActivity.this);
        dlg.setTitle("Quick Brown Fox");
        dlg.setContentView(R.layout.dialog);
        dlg.show();

        if (bWide == true) {
            Window win = dlg.getWindow();
            WindowManager.LayoutParams lpCur = win.getAttributes();
            WindowManager.LayoutParams lpNew = new WindowManager.LayoutParams();
            lpNew.copyFrom(lpCur);
            lpNew.width = WindowManager.LayoutParams.FILL_PARENT;
            lpNew.height = WindowManager.LayoutParams.WRAP_CONTENT;
            win.setAttributes(lpNew);
        }
    }
}
ダイアログの表示自体は同じようなものですので関数にしました。横幅を広げる処理は38-44行めです。

35行めのdlg.show();でダイアログを表示し、38行めのdlg.getWindow();で表示中のウィンドウ情報(この場合はダイアログの情報)を取得します。

39-41行めで、ダイアログのレイアウト情報を取得して、42-44行めで新しく作ったパラメータをセットします。XMLで指定したパラメータが効かないので、動的に指定しています。

Androidプロジェクトの設定
プロジェクト名:DialogTest2a
アプリケーション名:DialogTest2a
パッケージ名:jp.co.triware.samples.DialogTest2a
アクティビティーの作成:DialogTest2aActivity
ビルドターゲットや最小SDKバージョンは、お使いの開発環境に合わせて設定してください。

実行結果
「Normal Dialog」をクリックすると・・・
ダイアログの横幅は、メッセージの長さ程度ですが、「Wide Dialog」の場合は・・・
横幅いっぱいのダイアログになりました。

0 件のコメント:

コメントを投稿