美文网首页
0x002 Dialog

0x002 Dialog

作者: 卖梳子的鲤鱼 | 来源:发表于2016-05-13 17:22 被阅读78次

    0x000 环境:


    • 系统:Win10
    • IDE:Android Studio2.0

    0x002 简单使用


    • 继承树:
      Dialog是AlertDialog、DatePickerDialog、ProgressDialog等一些常用Dialog的直接或者间接父类,但是官网文档说我们应当避免直接使用父类,而应该使用他们的子类。


      Paste_Image.png
    • AlertDialog最简单使用方式:

      • 代码:

        AlertDialog.Builder builder=new AlertDialog.Builder(DialogActivity.this);
                builder.setTitle("SimpleAlert");
                builder.setMessage("are you ok");
                builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),"you click cancle",Toast.LENGTH_LONG).show();
        
                    }
                });
                builder.setPositiveButton("Sure", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),"you click sure",Toast.LENGTH_LONG).show();
        
                    }
                });
                builder.create().show();
        
      • 效果:


        Paste_Image.png

      -说明:Dialog使用的是建造者模式,所以我们要用build来建造一个dialog,同时根据建造者模式的特性,我们还可以这么写:

          AlertDialog.Builder builder=new AlertDialog.Builder(DialogActivity.this);
                builder.setTitle("SimpleAlert").
                setMessage("are you ok").
                setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),"you click cancle",Toast.LENGTH_LONG).show();
      
                    }
                }).
                setPositiveButton("Sure", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(),"you click sure",Toast.LENGTH_LONG).show();
      
                    }
                }).create().show();
      
    • DialogFragment
      官网中推荐我们不应当这么使用,而是应该使用DialogFragment,因为这样可以更好地管理Dialog的生命周期和方法。所以接下来都会使用DialogFragment的方式来写

      • 代码:
        //MyDialogFragment.java
        public class MyDialogFragment extends android.support.v4.app.DialogFragment {
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
        builder.setTitle("first alert");
        builder.setMessage("are you OK");
        builder.setPositiveButton("Sure", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(getContext(),"you click sure",Toast.LENGTH_LONG).show();
        }
        });
        builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(getContext(),"you click cancle",Toast.LENGTH_LONG).show();

            }
        });
        return builder.create();
        }
        }
        //DialogActivity
        MyDialogFragment myDialogFragment=new MyDialogFragment();
        myDialogFragment.show(getSupportFragmentManager(),"");
        

    0x003 AlertDialog


    • 再添加一个按钮
      • 代码:
        public class NatureButtonFragment extends DialogFragment {
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
        builder.setTitle("more button")
        .setMessage("more button")
        //确认按钮
        .setNegativeButton("SURE", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(getContext(),"you click sure",Toast.LENGTH_LONG).show();

                    }
                })
                //取消按钮
                .setPositiveButton("CANCLE", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"you click cancle",Toast.LENGTH_LONG).show();
        
                    }
                })
                //第三个按钮,不是确认也不是取消,而是介于二者中间,例如Remind Me Later
                .setNeutralButton("REMAIND ME LATER", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"you click later",Toast.LENGTH_LONG).show();
                    }
                });
        return builder.create();
        
        }
        }
        
      • 效果

    Paste_Image.png
    • 添加一个列表
    • 代码:
      //ListDialogFragment.java
      public class ListDialogFragment extends DialogFragment {
      @NonNull
      @Override
      public Dialog onCreateDialog(Bundle savedInstanceState) {
      final String s[] = new String[]{"item1", "item2", "item3"};
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
      builder.setTitle("List")
      .setItems(s, new DialogInterface.OnClickListener() {
      @TargetApi(Build.VERSION_CODES.M)
      @Override
      public void onClick(DialogInterface dialog, int which) {
      Toast.makeText(getContext(), "you click " + s[which], Toast.LENGTH_LONG).show();
      }
      });
      return builder.create();
      }
      }
    • 效果:
    Paste_Image.png
    • 添加一列单选按钮
      • 代码:
        public class ListDialogFragment extends DialogFragment {
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        final String s[] = new String[]{"item1", "item2", "item3"};
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("List")
        .setItems(s, new DialogInterface.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.M)
        @Override
        public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(getContext(), "you click " + s[which], Toast.LENGTH_LONG).show();
        }
        });
        return builder.create();
        }
        }
      • 效果:
    Paste_Image.png
    • 添加一列多选按钮
      • 代码:
        public class MultipChoiceDialogFragment extends DialogFragment {
        @TargetApi(Build.VERSION_CODES.M)
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        final String s[]={"item1","item2","item3"};
        final boolean s2[]={true,false,false};

                  AlertDialog.Builder builder=new AlertDialog.Builder(getContext());
                  builder.setMultiChoiceItems(s, s2, new DialogInterface.OnMultiChoiceClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                          Toast.makeText(getContext(),s[which]+" isChecked is "+isChecked,Toast.LENGTH_LONG).show();
                      }
                  });
                  return builder.create();
              }
          }
        
      -效果:
    Paste_Image.png
    • 自定义视图
      • 代码:
        //CustomerDialogFragment.java
        public class CustomerDialogFragment extends DialogFragment {
        @TargetApi(Build.VERSION_CODES.M)
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder=new AlertDialog.Builder(getContext());
        builder.setView(R.layout.fragment_dialog_customer);
        return builder.create();
        }
        }
        //R.layout.fragment_dialog_customer.xml
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:padding="20dp"
        android:layout_height="match_parent">
        <EditText
        android:hint="username"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
        <EditText
        android:hint="password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
        <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
        android:text="REGISTER"
        android:layout_weight="1"
        android:layout_width="0px"
        android:layout_height="wrap_content" />
        <Button
        android:text="LOGIN"
        android:layout_weight="1"
        android:layout_width="0px"
        android:layout_height="wrap_content" />
        </LinearLayout>
        </LinearLayout>
      • 效果:
    Paste_Image.png
    • 在activity中处理按钮事件:
      • 代码:
        //EventBackDialogFragment .java
        public class EventBackDialogFragment extends DialogFragment {
        public interface EventBackDialogListener{
        public void OnPositiveClick(DialogFragment dialogFragment);
        public void OnNegativeClick(DialogFragment dialogFragment);
        }
        EventBackDialogListener mListener;
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {

                  AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
                  builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          mListener.OnNegativeClick(EventBackDialogFragment.this);
                      }
                  })
                          .setPositiveButton("SURE", new DialogInterface.OnClickListener() {
                              @Override
                              public void onClick(DialogInterface dialog, int which) {
                                  mListener.OnPositiveClick(EventBackDialogFragment.this);
                              }
                          });
                  return builder.create();
          
              }
          
              @Override
              public void onAttach(Activity activity) {
          
                  super.onAttach(activity);
                  mListener= (EventBackDialogListener) activity;
              }
          }
          //DialogActivity
        public class DialogActivity extends ListActivity implements   EventBackDialogFragment.EventBackDialogListener {
          @Override
          protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
            EventBackDialogFragment eventBackDialogFragment=new EventBackDialogFragment();
              eventBackDialogFragment.show(getFragmentManager(),"");
          }
         @Override
        public void OnPositiveClick(android.app.DialogFragment dialogFragment) {
        Toast.makeText(getApplicationContext(),"you  click Sure",Toast.LENGTH_LONG).show();
        
        }
        
        @Override
        public void OnNegativeClick(android.app.DialogFragment dialogFragment) {
         Toast.makeText(getApplicationContext(),"you  click Cancle",Toast.LENGTH_LONG).show();
        
        }
        }
        

    0x004 ProgressDialog


    • 概述:progressDialog和DatapickerDilaog等其实不过是AlertDialog的子类,所以说白了,不过是一个封装好的Dialog,比如progressDlialog不过是封装了一个progress的AlertDialog。
    Paste_Image.png
    • progressDialog进度条
      • 代码:
        public class ProgressDialogFragment extends DialogFragment {
        @TargetApi(Build.VERSION_CODES.M)
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {

                ProgressDialog progressDialog=new ProgressDialog(getContext());
                return progressDialog;
            }
        }
        
      • 效果图

    Paste_Image.png
    • 带进度的progress
      在ProgressDialog.java中,有一个方法名为setProgressStyle(int style ),我们跳到mProgressStyle,就会看到
      public static final int STYLE_SPINNER = 0;//spinner进度条
      public static final int STYLE_HORIZONTAL = 1;//horizontal进度条
      Paste_Image.png
    Paste_Image.png
    • 代码:

       public class ProgressHorizatalDialogFragment extends DialogFragment {
         @TargetApi(Build.VERSION_CODES.M)
         @NonNull
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
      
             ProgressDialog progressDialog=new ProgressDialog(getContext());
             progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
             progressDialog.setMessage("正在下载");
             progressDialog.setProgress(20);
             progressDialog.setMax(100);
             return progressDialog;
         }
       }
      
    • 效果

    Paste_Image.png

    0x005 DatePickerDialog


    • 代码:
      public class DatePickerDialogFragment extends DialogFragment {
      @TargetApi(Build.VERSION_CODES.M)
      @NonNull
      @Override
      public Dialog onCreateDialog(Bundle savedInstanceState) {
      DatePickerDialog datePickerDialog=new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
      @Override
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                    }
                },2016,10,12);
                return datePickerDialog;
        
            }
        }
      
    • 效果:

    Paste_Image.png

    TimePickerDialog

    • 代码
      public class TimePickerDialogFragment extends DialogFragment {
      @TargetApi(Build.VERSION_CODES.M)
      @NonNull
      @Override
      public Dialog onCreateDialog(Bundle savedInstanceState) {
      TimePickerDialog timePickerDialog=new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
      @Override
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
      Toast.makeText(getContext(),"you choice"+hourOfDay+":"+minute,Toast.LENGTH_LONG).show();
      }
      },12,12,true);
      timePickerDialog.show();
      return timePickerDialog;
      }
      }
    • 效果
    Paste_Image.png

    相关文章

      网友评论

          本文标题:0x002 Dialog

          本文链接:https://www.haomeiwen.com/subject/uqfmrttx.html