1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-04

ダイアログに複数の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();
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0