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プロジェクトの設定
ビルドターゲットや最小SDKバージョンは、お使いの開発環境に合わせて設定してください。
プロジェクト名: DialogTest2a アプリケーション名: DialogTest2a パッケージ名: jp.co.triware.samples.DialogTest2a アクティビティーの作成: DialogTest2aActivity
実行結果
「Normal Dialog」をクリックすると・・・
ダイアログの横幅は、メッセージの長さ程度ですが、「Wide Dialog」の場合は・・・
横幅いっぱいのダイアログになりました。



0 件のコメント:
コメントを投稿