ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
Android Studio : カスタムダイアログ
日時: 2015/10/03 17:40
名前: lightbox






カスタムダイアログで View をセットする場合は、View が含まれたダイアログのインスタンスを使って再度表示します。

1回目
ad = adb.create();
ad.show();

2回目
ad.show();

この場合、次の表示では、内部の状態は保持されています。ここでは EditText を使用しており、内容を取得した後はクリアしています。

adb 側で show するには、毎回新しい View を作成して setView する必要があります。
※ View の内容は毎回初期化されます
package sample.lightbox.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

	// ダイアログ作成用
	private AlertDialog.Builder adb = null;
	// ダイアログのインスタンス
	private AlertDialog ad = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// ダイアログ作成用のインスタンス
		adb = new AlertDialog.Builder(MainActivity.this	);
		// final で view をメモリに固定する
		final View view = MainActivity.this.getLayoutInflater().inflate(R.layout.content_main, null);

		// ダイアログのオプション
		adb
			.setTitle("カスタム ダイアログ")
			.setView(view)
			.setPositiveButton("YES", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// 登録された画面より取得する
					EditText et = (EditText) view.findViewById(R.id.textInDialog);
					// 入力値の処理
					Log.i("lightbox", "PositiveButton");
					Log.i("lightbox", et.getText().toString());

					// 処理が終了したので、テキストエリアをクリアする
					// ※ クリアしなければ、次に表示した時に残っています
					et.setText("");
				}
			});
		// ダイアログそのものの インスタンス 生成
		ad = adb.create();

		// ボタンのイベント
		MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// ダイアログを表示
				ad.show();
			}
		});
	}

}
メンテナンス

ダイアログの画面定義 ( No.1 )
日時: 2015/10/03 17:36
名前: lightbox


日時: 2015/10/03 17:36
名前: lightbox



android:gravity="left|top" で、左上からの入力になり、android:padding="10dp" で、テキストエリア内に余白ができます
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/textInDialog"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:background="@drawable/boxline"
        android:gravity="left|top"
        android:padding="10dp"/>
</RelativeLayout>
罫線の定義 : "src\main\res\drawable\boxline.xml"
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:color="@android:color/black"
        android:width="1dp" />
    <corners android:radius="6dp" />
</shape>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス