AlertDialog
クラスのsetView()
メソッドを使用すると、ダイアログボックスのカスタムビューを指定できます。このカスタムビューに含めることができるコントロールに関して制限はありますか?
また、カスタムビューを設定した場合でも、setPositiveButton()
、setNegativeButton()
などを使用してボタンを追加できますか?
AlertDialogクラスのsetView()メソッドを使用すると、ダイアログボックスのカスタムビューを指定できます。このカスタムビューに含めることができるコントロールに関して制限はありますか?
AlertDialog.Builder のsetView()
メソッドは、 View から拡張されたクラスを取ります(そのサブクラスとそのサブクラスを参照してください)。
これはEditText、ボタンなどを意味しますが、viewGroupsから拡張されるレイアウトも意味します。
また、カスタムビューを設定した場合でも、setPositiveButton、setNegativeButtonなどを使用してボタンを追加できますか?
はい、それは体にのみ影響を与えます。ボタンがレイアウトの下に追加されます。
_@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog
// layout
builder.setView(inflater.inflate(R.layout.YourLayout, null))
.setPositiveButton(AlertDialog.BUTTON_NEGATIVE, "Yes!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//
}
})
.setNegativeButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
_
UPDATE:
この回答は2年前から新しい活動があり、いくつかの点が変更されたようです。
書式を改善するためにコードを少し更新し、現在のベストプラクティスの状態を考慮して、次のヒントを追加しました。
AlertDialogはダイアログのスタイルと構造を定義しますが、ダイアログのコンテナとしてDialogFragmentを使用する必要があります。 DialogFragmentクラスは、Dialogオブジェクトのメソッドを呼び出す代わりに、ダイアログの作成とその外観の管理に必要なすべてのコントロールを提供します。
上記の例は、DialogFragment
を拡張し、onCreateDialog()
コールバックメソッドでAlertDialog
を作成する場合の例です。
AlertDialog
の提供されたドキュメントでは、AlertDialogのビュー内で設定できるものに制限はありません。
そのため、カスタムビューはダイアログのタイトルの下とボタンの上に配置され、まったく影響を受けません。
私が知る限り、setView()に何でも追加できます。ポジティブ/ネガティブボタンは影響を受けません。
TRY、この例
Android.support.v7.app.AlertDialog.Builder adb =
new Android.support.v7.app.AlertDialog.Builder(YoreActivity.this);
ViewGroup subView = (ViewGroup) getLayoutInflater().// inflater view
inflate(R.layout.yore_layout_alert, null, false);
try {// set data of yore layout
((TextView) subView.findViewById(R.id.messageAlert))//get element TextView
.setText(SomeText);//set text
} catch (NullPointerException npe) {
npe.printStackTrace();
}
adb.setPositiveButton("textPOSITIVE", new DialogInterface.OnClickListener() {//one method go
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO some code
}
});//one method end
final Android.support.v7.app.AlertDialog alertDialog =
adb.setTitle(SomeText)// set ttile
.setView( subView ).create();// add view in AlertDialog.Builder, and create AlertDialog
try { //two method go
((Button) subView.findViewById(R.id.customPositivButton))
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO some code
alertDialog.dismiss();
}
});
} catch (NullPointerException npe) {
npe.printStackTrace();
} //two method end
alertDialog.show(); //show in YoreActivity