0

    android中的提示框:Dialog以及改变Dialog的显示位置

    2023.07.17 | admin | 217次围观

    简介

    提示框(Dialog)在手机APP中,是必不可少的,比如设置些简单的属性、进度提醒等。

    就提示框(Dialog)而言,可以用两种方式:①、用android自带的类去实现;②、按自己的需要建一个xml作为一个对话框。

    很明显第一种方法只能实现简单的对话框android进度条对话框,代码量少;第二种方法可以实现任何想要的对话框,代码量大

    第一种方式的常用简单的对话框 ①普通对话框:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    /*设置主题、内容、按钮*/
    builder.setTitle("普通对话框").setMessage("是否删除?").setNegativeButton("否", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) {
                            arg0.dismiss();
                            /*关闭对话框*/
                        }
                    })
                    .setPositiveButton("是", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            Toast.makeText(MainActivity.this, "删除成功!",
                                    Toast.LENGTH_SHORT).show();
                                    /*提醒测试作用*/
                        }
                    });
            builder.create().show();
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    注:按钮分为确定按钮、取消按钮和中间按钮,当然中间按钮(setNeutralButton)没有在代码上体现。取消按钮一定在确定按钮的前面。

    ②列表对话框:

    final String[] provices = new String[] { "北京", "湖南", "江苏", "上海", "浙江" };
            AlertDialog.Builder builder = new Builder(this);
            builder.setTitle("选择省份:");
            /*!注意这里的方法以及参数哦!*/
            builder.setItems(provices, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    provice = provices[arg1];
                    Toast.makeText(MainActivity.this, "选择的城市为:" + provices[arg1],
                            Toast.LENGTH_SHORT).show();
                            /*提醒测试作用*/
                }
            });
            builder.create().show();
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ③单选对话框:

    final String[] provices = new String[] { "北京", "湖南", "江苏", "上海", "浙江" };
            AlertDialog.Builder builder = new Builder(this);
            builder.setTitle("单选按钮对话框");
            /*!注意这里的方法以及参数哟!"0"表示弹出对话框时,第一个是被选中的*/
            builder.setSingleChoiceItems(provices, 0,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            Toast.makeText(MainActivity.this,
                                    "选择的城市是:" + provices[arg1], Toast.LENGTH_SHORT)
                                    .show();
                                    /*提醒测试作用*/
                        }
                    });
            builder.create().show();
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ④多选对话框:

    final String[] provices = new String[] { "北京", "湖南", "江苏", "上海", "浙江" };
    final boolean[] bs={false,false,false,false,false};
            AlertDialog.Builder builder = new Builder(this);
            builder.setTitle("复选按钮对话框");
            /*!注意这里的方法以及参数0,boolean数组的个数要与第一个参数的数组个数要对应!*/
            builder.setMultiChoiceItems(provices, bs,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1,
                                boolean arg2) {
                            /*注意字符串数组provices和布尔数组bs的一一对应关系*/
                        }
                    });
            builder.create().show();
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    第一种方式较复杂的对话框 ⑤日期对话框

    OnDateSetListener dateSetListener = new OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
                /*arg1表示年份,arg2表示几月(比实际月份要少一),arg3表示几号*/
                    Toast.makeText(MainActivity.this,
                            "设置的时间为:" + arg1 + "年" + (arg2 + 1) + "月" + arg3 + "日",
                            Toast.LENGTH_SHORT).show();
                            /*提示检测作用*/
                }
            };
            /*注意这里声明对话框的方式与其他的对话框的区别*/
            DatePickerDialog datePickerDialog=new DatePickerDialog(this, dateSetListener, 2015, 10, 30);
            datePickerDialog.show();
            /*这里的第三个参数为年份,第四个为几月,在对话框显示是11月,自动加一,第五个是几号*/
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ⑥进度条对话框

    /*注意这里声明对话框的方式与其他的对话框的区别*/
    ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.setIcon(R.drawable.ic_launcher);
            progressDialog.setTitle("进度条对话框");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            /*这里表示添加最大进度,后面可以通过setprogress方法修改进度*/
            progressDialog.setMax(100);
            /*这里的button可以随便set,不限制个数*/
            progressDialog.setButton("Hide", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface Dialog, int which) {
                   //这里添加点击这个按钮后的事件
                }
            });
            progressDialog.setButton2("Cancel",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                        //这里添加点击这个按钮后的事件
                        }
                    });
            progressDialog.show();
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    注:是不是发现有的dialog是先create然后又show的,其实不create是完全可以滴。。。

    测试代码已上传,可能和上述代码有点差别,但大体上是一样一样的~

    第二种方式实现步骤

    案例示范:

    ①主xml文件添加一个按钮

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="200dp"
        android:layout_height="150dp"
        >
    <Button
        android:id="@+id/bt1" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提示框"
        />
    RelativeLayout>
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ②创建settishi.xml文件做对话框(只是简单的示范)

    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="200dp"
        android:layout_height="150dp" 
        android:background="#FF0000">
        
    RelativeLayout>
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ③新建SetTiShi.java

    public class SetTiShi extends Dialog {
        Context context;
        public SetTiShi(Context context, int theme) {
        /*这里很重要,按照规定好的格式去执行dialog*/
            super(context, theme);
            // TODO Auto-generated constructor stub
            this.context = context;
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.settishi);
        }
    }
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ④res/values/styles.xml中添加代码