Dialog对话框
一、常用的对话框
1.普通对话框
代码实现:
//普通对话框方法
private void normal_dialog() {
//构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置属性
builder.setTitle("普通对话框") //设置标题
.setIcon(R.mipmap.paidaixing)//设置图标
.setMessage("是否同意?") //设置内容
.setCancelable(true); //点击对话框外部,对话框关闭
//设置确定按钮
builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "已同意", Toast.LENGTH_SHORT).show();
}
});
//设置取消按钮
builder.setNegativeButton("不同意", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "您不同意", Toast.LENGTH_SHORT).show();
}
});
//使用建造者创建对话框
AlertDialog dialog = builder.create();
dialog.show(); //显示对话框
}
2.单选对话框
代码实现:
//单选对话框方法
private void single_dialog() {
//构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置属性
builder.setIcon(R.mipmap.paidaixing)//设置图标
.setTitle("选择您的需求") //设置标题
.setCancelable(true); //点击对话框外部,对话框关闭
//确定按钮
builder.setPositiveButton("完成", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "已完成", Toast.LENGTH_SHORT).show();
}
});
//取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "已取消", Toast.LENGTH_SHORT).show();
}
});
//设置选项内容
final String[] items = {"打滴","公交","骑行","徒步"};
//参数一 列表 参数二 默认选中下表 参数三 事件监听
builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "您的选择为:"+items[i], Toast.LENGTH_SHORT).show();
}
});
//使用建造者创建对话框
AlertDialog dialog = builder.create();
dialog.show();//显示对话框
}
3.多选对话框
代码实现:
//多选对话框方法
private void mulite_dialog() {
//定义选项
final String[] items = {"唱","跳","rap","篮球"};
//设置默认选中(true为选中)
final boolean[] flags = {true,true,true,true};
//构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置属性
builder.setIcon(R.mipmap.paidaixing)//设置图标
.setTitle("选择您的兴趣") //设置标题
.setPositiveButton("完成", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
for (int i = 0; i < flags.length; i++) {
if (flags[i]){
Toast.makeText(MainActivity.this, "您选择了:"+items[i], Toast.LENGTH_SHORT).show();
}
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "您取消您🐎呢?", Toast.LENGTH_SHORT).show();
}
});
//设置多选列表
//参数一 列表 参数二 默认选中下表 参数三 事件监听
builder.setMultiChoiceItems(items, flags, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
flags[i] = b;
}
});
//使用建造者创建对话框
AlertDialog dialog = builder.create();
dialog.show();//显示对话框
}
4.简单自定义对话框
①自定义布局:custom_item.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:layout_height="match_parent">
<ImageView
android:id="@+id/image_View"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/sleep"/>
</LinearLayout>
②点击弹出框或弹框外部关闭对话框,java代码实现:
//简单自定义对话框
private void custom_dialog() {
//获得视图
View view = LayoutInflater.from(this).inflate(R.layout.custom_item, null);
ImageView image = view.findViewById(R.id.image_View);
//构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置自定义布局
builder.setView(view);
//使用构建者创建对话框
final AlertDialog dialog = builder.create();
dialog.show();//显示对话框
//点击弹框关闭对话框
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
5.水平精确进度条对话框
代码实现:
//水平精确进度条
private void hor_progress_dialog() {
//1:实例化对象
final ProgressDialog dialog = new ProgressDialog(this);
//2:设置属性
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置水平样式
dialog.setMax(100);//进度条最大值
dialog.setMessage("加载中...");//设置内容
dialog.show();//显示
//定时器模拟进度
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
if (progress >= 100){
dialog.dismiss();//根据条件消失
timer.cancel();
}
dialog.setProgress(progress += 15);
}
},0,1000);//0秒后执行,每隔1000毫秒执行一次
}
6.日期选择对话框
代码实现:
//日期选择对话框DatePickerDialog
private void date_dialog() {
/**
* context 上下文
* listener 监听器
* year 默认的年
* month 默认的月
* dayOfMonth 默认的日
*/
Calendar calendar = Calendar.getInstance();//日历对象
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();
}
7.时间选择对话框
代码实现:
//时间选择对话框:TimePickerDialog
private void time_dialog() {
/**
* context 上下文
* listener 监听器
* hourOfDay 默认的时
* minute 默认的分钟
* is24HourView 是否采用24时禁止
*/
Calendar calendar = Calendar.getInstance();//日历对象
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
Toast.makeText(MainActivity.this, "当前时间:"+hour+":"+minute, Toast.LENGTH_SHORT).show();
}
},calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),false).show();
}
二、自定义对话框
1.步骤
①.自定义类继承Dialog
②.重写Dialog的方法并添加需要的功能
③.在Activity中实例化自定义类的对象
效果图
2.代码实现:
①xml布局:自定义对话框的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<RelativeLayout
android:id="@+id/relative_layout"
android:layout_width="300dp"
android:layout_height="200dp"
android:gravity="center_horizontal">
<TextView
android:id="@+id/textView"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center"
android:text="WARNING"
android:textColor="@android:color/holo_red_dark"
android:textSize="30dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="200dp"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_below="@id/textView"
android:layout_marginTop="25dp"
android:text="是否继续访问"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_id1"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:text="取消"
android:background="@android:color/holo_green_light"
android:textColor="@android:color/holo_red_light"
android:textSize="15sp"/>
<Button
android:id="@+id/btn_id2"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/btn_id1"
android:text="确定"
android:textSize="15sp"
android:background="@android:color/holo_red_light"
android:textColor="@android:color/holo_green_light"/>
</RelativeLayout>
</RelativeLayout>
②自定义类继承Dialog
package com.bwie.androidthesecond;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
public class MyDialog extends Dialog {
private Button button1,button2; //确定和取消按钮
private TextView textView1,textView2;//标题文本和消息文本
private String titleStr,messageStr; //外部设置的title文本和外部设置的消息文本
private String yesStr,noStr; //确定文本和取消文本的显示内容
private YesOnClickListener yesOnClickListener;//确定按钮被点击了的监听器
private NoOnClickListener noOnClickListener;//取消按钮被点击了的监听器
//定义接口
public interface NoOnClickListener{
void onNoClick();
}
//set方法
public void setNoOnClickListener(NoOnClickListener noOnClickListener) {
this.noOnClickListener = noOnClickListener;
}
//定义接口
public interface YesOnClickListener{
void onYesClick();
}
//set方法
public void setYesOnClickListener(YesOnClickListener yesOnClickListener){
this.yesOnClickListener = yesOnClickListener;
}
//onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom1_item);
//初始化界面控件
textView1 = findViewById(R.id.textView);
textView2 = findViewById(R.id.textView1);
button1 = findViewById(R.id.btn_id1);
button2 = findViewById(R.id.btn_id2);
//如果用户自定了title和message
if (titleStr != null){
textView1.setText(titleStr);
}
if (messageStr != null){
textView2.setText(messageStr);
}
//如果设置按钮文字
if (noStr != null){
button1.setText(noStr);
}
if (yesStr != null){
button2.setText(yesStr);
}
//取消按钮
button1.setOnClickListener(new View.OnClickListener() {
//设置取消按钮被点击后,向外界提供监听
@Override
public void onClick(View view) {
if (noOnClickListener != null){
noOnClickListener.onNoClick();
dismiss();
}
}
});
//确定按钮
button2.setOnClickListener(new View.OnClickListener() {
//设置确定按钮被点击后,向外界提供监听
@Override
public void onClick(View view) {
if (yesOnClickListener != null){
yesOnClickListener.onYesClick();
dismiss();
}
}
});
}
//从外界Activity为Dialog设置标题
public void setNoStr(String no){
noStr = no;
}
public void setYesStr(String yes){
yesStr = yes;
}
public void setTitle(String title){
titleStr = title;
}
public void setMessageStr(String message){
messageStr = message;
}
public MyDialog(Context context) {
super(context);
//去掉默认的标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
}
③MainActivity代码 完全自定义对话框方法:
//完全自定义对话框
private void all_custom_dialog() {
//创建对象
MyDialog myDialog = new MyDialog(this);
myDialog.setTitle("worning"); //设置标题
myDialog.setMessageStr("访问风险"); //设置消息
myDialog.setNoStr("不OJBK");//设置取消按钮的文本
//取消按钮的监听
myDialog.setNoOnClickListener(new MyDialog.NoOnClickListener() {
@Override
public void onNoClick() {
Toast.makeText(MainActivity.this, "没有OJBK", Toast.LENGTH_SHORT).show();
}
});
myDialog.setYesStr("OJBK");//设置确定按钮的文本
//确定按钮的监听
myDialog.setYesOnClickListener(new MyDialog.YesOnClickListener() {
@Override
public void onYesClick() {
Toast.makeText(MainActivity.this, "OJBK了", Toast.LENGTH_SHORT).show();
}
});
myDialog.show();//显示对话框
}