Dialog

作者: 鴻9527 | 来源:发表于2019-08-02 20:36 被阅读0次

    Dialog的继承关系

    image

    简单对话框

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="普通Dialog"
            android:onClick="click"/>
    </LinearLayout>
    
    

    Java代码

    import android.content.DialogInterface;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            new AlertDialog.Builder(this)
                    .setIcon(R.mipmap.ic_launcher) //设置对话框的图标
                    .setTitle("普通对话框")  //设置对话框的标题
                    .setMessage("正在拼命加载中") //设置对话框的信息
                    //添加消极按钮
                    .setNegativeButton("消极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了消极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加积极按钮
                    .setPositiveButton("积极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了积极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加中性按钮
                    .setNeutralButton("中性按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了中性按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .create() //创建对话框
                    .show();  //显示对话框
        }
    }
    
    
    image

    进度对话框

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="进度Dialog"
            android:onClick="click"/>
    </LinearLayout>
    
    

    Java代码

    import android.app.ProgressDialog;
    import android.os.CountDownTimer;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            final ProgressDialog progressDialog = new ProgressDialog(this);
            //设置对话框的图标
            progressDialog.setIcon(R.mipmap.ic_launcher);
            //设置对话框的标题
            progressDialog.setTitle("进度对话框");
            //设置对话框的信息
            progressDialog.setMessage("正在拼命加载中");
            //设置对话框的样式
      progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            //设置最大进度
            progressDialog.setMax(100);
            //设置当前进度
            progressDialog.setProgress(0);
            //显示对话框
            progressDialog.show();
    
            /***
             * millisInFuture 总时间
             * countDownInterval 间隔时间
             */
            new CountDownTimer(5100,1000){
    
                //每次执行的方法
                @Override
                public void onTick(long millisUntilFinished) {
                    //增加进度
                    progressDialog.incrementProgressBy(20);
                }
    
                //执行完毕后的方法
                @Override
                public void onFinish() {
                    //关闭对话框
                    progressDialog.dismiss();
                }
            }.start();
            //ProgressDialog同样也可以设置三个按钮
        }   
    }
    
    

    效果图

    image

    日期对话框

    布局文件同上

    Java代码

    import android.app.DatePickerDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.DatePicker;
    import android.widget.Toast;
    
    import java.util.Calendar;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            //获得日历类对象
            Calendar calendar = Calendar.getInstance();
            /***
             * contexrt 上下文
             * listener 监听器
             * year 年份
             * month 月份
             * dayOfMonth 天数
             */
            new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                    Toast.makeText(MainActivity.this, year + "年" + (month + 1) + "月" + dayOfMonth + "日", Toast.LENGTH_SHORT).show();
                }
            }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
        }
    
    }
    
    

    效果图

    image

    时间对话框

    布局文件同上

    Java代码

    import android.app.TimePickerDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TimePicker;
    import android.widget.Toast;
    
    import java.util.Calendar;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            Calendar calendar = Calendar.getInstance();
            /***
             * contexrt 上下文
             * listener 监听器
             * hourOfDay 小时
             * minute 分钟
             * is24HourView 是否是24小时制
             */
            new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    Toast.makeText(MainActivity.this, hourOfDay + "点" + minute + "分", Toast.LENGTH_SHORT).show();
                }
            }, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), true).show();
        }
    
    }
    
    

    效果图

    image

    列表对话框

    布局文件同上

    Java代码

    import android.content.DialogInterface;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            //数据源
            final String[] datas = {"情网", "风继续吹", "饿狼传说", "当年情", "李香兰", "春夏秋冬", "吻别", "爱慕"};
            new AlertDialog.Builder(this)
                    .setIcon(R.mipmap.ic_launcher) //设置对话框的图标
                    .setTitle("普通对话框")  //设置对话框的标题
                    /***
                     * adapter 适配器
                     * listener 监听器
                     */
                    .setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, datas), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了" + datas[which], Toast.LENGTH_SHORT).show();
                        }
                    }) //设置对话框的信息
                    //添加消极按钮
                    .setNegativeButton("消极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了消极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加积极按钮
                    .setPositiveButton("积极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了积极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加中性按钮
                    .setNeutralButton("中性按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了中性按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .create() //创建对话框
                    .show();  //显示对话框
    
        }
    
    }
    
    

    效果图

    image

    单选列表对话框

    布局文件同上

    Java代码

    import android.content.DialogInterface;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            final String[] datas = {"情网", "风继续吹", "饿狼传说", "当年情", "李香兰", "春夏秋冬", "吻别", "爱慕"};
            new AlertDialog.Builder(this)
                    .setIcon(R.mipmap.ic_launcher) //设置对话框的图标
                    .setTitle("单选列表对话框")  //设置对话框的标题
                    /***
                     * items 选项
                     * checkedItem 默认选项
                     * listener 监听器
                     */
                    .setSingleChoiceItems(datas, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "选择了" + datas[which], Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加消极按钮
                    .setNegativeButton("消极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了消极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加积极按钮
                    .setPositiveButton("积极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了积极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加中性按钮
                    .setNeutralButton("中性按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了中性按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .create() //创建对话框
                    .show();  //显示对话框
        }
    
    }
    
    

    效果图

    image

    多选列表对话框

    布局文件同上

    Java代码

    import android.content.DialogInterface;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    import java.util.Calendar;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view) {
            final String[] datas = {"情网", "风继续吹", "饿狼传说", "当年情", "李香兰", "春夏秋冬", "吻别", "爱慕"};
            boolean[] flag = {false, false, false, false, false, false, false, false};
            new AlertDialog.Builder(this)
                    .setIcon(R.mipmap.ic_launcher) //设置对话框的图标
                    .setTitle("多选列表对话框")  //设置对话框的标题
                    /***
                     * items 选项
                     * checkedItems 选项是否被选中
                     * listener 监听器
                     */
                    .setMultiChoiceItems(datas, flag, new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                            if (isChecked) {
                                Toast.makeText(MainActivity.this, "选择了" + datas[which], Toast.LENGTH_SHORT).show();
                            } else {
                                Toast.makeText(MainActivity.this, "取消了" + datas[which], Toast.LENGTH_SHORT).show();
                            }
                        }
                    })
                    //添加消极按钮
                    .setNegativeButton("消极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了消极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加积极按钮
                    .setPositiveButton("积极按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了积极按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    //添加中性按钮
                    .setNeutralButton("中性按钮", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "点击了中性按钮", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .create() //创建对话框
                    .show();  //显示对话框
        }
    
    }
    
    

    效果图

    image

    自定义对话框

    1. 新建自定义Dialog的布局文件

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout
          xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:gravity="center"
          android:background="@drawable/my_dialog">
      
          <EditText
              android:id="@+id/userName"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="用户名"
              android:gravity="center"/>
          <EditText
              android:id="@+id/password"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="密码"
              android:gravity="center"
              android:layout_marginTop="20dp"/>
          <Button
              android:id="@+id/login"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="登录"/>
      
      </LinearLayout>
      
      
    2. 自定义圆角drawable

      <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android">
          <!--设置圆角-->
          <corners android:radius="10dp"/>
          <!--设置背景颜色-->
          <solid android:color="#ffffff"/>
      </shape>
      
      
    3. 新建MyDialog类继承Dialog并重写方法

      package com.example.dialog;
      
      import android.app.Dialog;
      import android.content.Context;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.Button;
      import android.widget.EditText;
      import android.widget.Toast;
      
      public class MyDialog extends Dialog {
          private Context context;
      
          public MyDialog(Context context) {
              super(context);
              this.context = context;
          }
      
          private EditText userName, password;
          private Button login;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.my_dialog_layout);
              userName = findViewById(R.id.userName);
              password = findViewById(R.id.password);
              login = findViewById(R.id.login);
              login.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Toast.makeText(context, "用户名:" + userName.getText().toString() + ",密码:" + password.getText().toString(), Toast.LENGTH_SHORT).show();
                  }
              });
          }
      }
      
      
    4. 创建并显示

      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.view.View;
      import android.view.Window;
      import android.view.WindowManager;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          }
      
          public void click(View view) {
              MyDialog myDialog = new MyDialog(this);
              //获得窗口对象
              Window window = myDialog.getWindow();
              //设置透明背景色
              window.setBackgroundDrawableResource(android.R.color.transparent);
              //获得窗口参数对象
              WindowManager.LayoutParams attributes = window.getAttributes();
              //设置高
              attributes.height = 100;
              //设置宽
              attributes.width = 100;
              //将窗口参数设置给窗口l
              window.setAttributes(attributes);
              //显示对话框
              myDialog.show();
          }
      
      }
      
      

      效果图

      image

    自定义日期对话框

    1. 新建自定义MyDateDialog布局文件

       <DatePicker
              android:id="@+id/data_picker"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
      
          </DatePicker>
          <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_below="@id/data_picker"
              android:layout_alignRight="@id/data_picker"
              android:orientation="horizontal">
              <Button
                  android:id="@+id/queding"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:background="@null"
                  android:layout_weight="1"
                  android:text="确定"/>
              <Button
                  android:id="@+id/quxiao"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:background="@null"
                  android:layout_weight="1"
                  android:text="取消"/>
          </LinearLayout>
      
      
    2. 新建MyDateDialog类继承Dialog并重写方法

      package com.example.dialog;
      
      import android.app.Dialog;
      import android.content.Context;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.Button;
      import android.widget.DatePicker;
      import android.widget.Toast;
      
      public class MyDateDialog extends Dialog {
          private Context context;
      
          public MyDateDialog(Context context) {
              super(context);
              this.context = context;
          }
      
          private DatePicker data_picker;
          private Button confirm, cancel;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.my_date_layout);
              data_picker = findViewById(R.id.data_picker);
              confirm = findViewById(R.id.confirm);
              cancel = findViewById(R.id.cancel);
              confirm.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Toast.makeText(context, data_picker.getYear() + "年" + (data_picker.getMonth() + 1) + "月" + data_picker.getDayOfMonth() + "日", Toast.LENGTH_SHORT).show();
                      MyDateDialog.this.dismiss();
                  }
              });
      
              cancel.setOnClickListener(new View.OnClickListener() {
      
                  @Override
                  public void onClick(View v) {
                      Toast.makeText(context, "取消", Toast.LENGTH_SHORT).show();
                      MyDateDialog.this.dismiss();
                  }
              });
          }
      }
      
      
    3. 创建自定义日期对话框并显示

      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.view.View;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          }
      
          public void click(View view) {
              new MyDateDialog(this).show();
          }
      
      }
      
      

    效果图

    image

    相关文章

      网友评论

          本文标题:Dialog

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