カスタムダイアログで View をセットする場合は、View が含まれたダイアログのインスタンスを使って再度表示します。 1回目 ad = adb.create(); ad.show(); 2回目 ad.show(); この場合、次の表示では、内部の状態は保持されています。ここでは EditText を使用しており、内容を取得した後はクリアしています。 adb 側で show するには、毎回新しい View を作成して setView する必要があります。 ※ View の内容は毎回初期化されます 拡張子:txtvbswsfjsphpjavahtmlutf8sjis 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(); } }); } }
カスタムダイアログで 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(); } }); } }
android:gravity="left|top" で、左上からの入力になり、android:padding="10dp" で、テキストエリア内に余白ができます 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?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" 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?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>
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>
<?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>