Dialog

2019-08-02  本文已影响0人  鴻9527

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
上一篇 下一篇

猜你喜欢

热点阅读