51歳からのプログラミング　備忘　android ダイアログに複数のViewを表示/xml使ったり使わなかったり

ダイアログに複数の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

```java:MainActivity
protected void onCreate(final Bundle savedInstanceState){
  ...
  AppCompatDialogFragment dialog = new MyDialog();
  dialog.show(getSupportFragmentManager(),null);
}
```

```java: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();
      }
}
```

```java: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

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

    MyDialog dialog = new MyDialog();
    dialog.show(getSupportFragmentManager(),null);
}
```

```java: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();
    }
}
```