ダイアログに複数のViewを表示するには、Viewを配置したLinearLayoutを、ダイアログにインフレートする。後で使いたい機能なのでちょっと備忘メモ。
今回は、layout.xmlを利用したダイアログと、layout.xmlを利用せず、new LinearLayoutでLayoutを動的生成したダイアログを備忘メモメモ。
Layout/xmlを使う(App/res/layout/---.xmlファイルを使う)
構成
1.MainActivity.java
2.MyDialog.java
3.dilog_my.xml
MainActivity
protected void onCreate(final Bundle savedInstanceState){
...
AppCompatDialogFragment dialog = new MyDialog();
dialog.show(getSupportFragmentManager(),null);
}
MyDialog.java
public class MyDialog extends AppCompatDialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
// getActivity().getLayoutInflater();でもいけた
builder.setView(inflater.inflate(R.layout.dialog_my,null))
.setPositiveButton("OK",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
// OKボタンを押した時の処理
}
}).setNegativeButton("cancel",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface,int i){
// CANCELボタンを押した時の処理
}
});
return builder.create();
}
}
dialog_my.xml
// インフレートさせるレイアウト
// EditTextを2つ配置してみる
<?xml version="1.0" encodeing="utf-8" ?>
<LinearLayout xmls:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/edit1"
android:inputType="numberPassword"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<EditText
android:id="@+id/edit2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Layout.xmlを使わない(App/res/layout/---.xmlファイルを使わない)
構成
MainActivity.java
MyDialog.java
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDialog dialog = new MyDialog();
dialog.show(getSupportFragmentManager(),null);
}
MyDialog
public class MyDialog extends AppCompatDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Dialogの属性とかを設定するための Builder を生成
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LinearLayout linearLayout = new LinearLayout(getActivity());
linearLayout.setOrientation(LinearLayout.VERTICAL);
// レイアウトに生成する TextView
TextView textView = new TextView(getActivity());
textView.setText("TEXT");
textView.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.addView(textView);
// レイアウトに生成する EditText を生成
EditText editText = new EditText(getActivity());
editText.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.addView(editText);
builder
.setView(linearLayout)
.setTitle("sample")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// OKボタン押下処理
}
}).setNegativeButton("CANCELL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// CANCELLボタン押下処理
}
});
this.setCancelable(false);
return builder.create();
}
}