对话框 dialog
- 一、常用对话框
- 普通对话框
- 单选对话框
- 多选对话框
- 自定义内容对话框
- 水平进度条对话框
- 圆形进度条对话框
- 日期选择对话框
- 时间选择对话框
- 二、自定义对话框(重难点)
一、常用对话框
普通对话框
//普通对话框
private void normal_dialog() {
//1.构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//2.设置属性 icon图标 title标题 message内容
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("这是标题");
builder.setMessage("这是内容");
//设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
}
});
//设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
}
});
//3.使用建造者创建对话框
AlertDialog dialog = builder.create();
//4.显示
dialog.show();
}
单选对话框
单选对话框 SingleChoiceItems
//单选对话框
private void single_dialog() {
//1.构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//2.设置属性 icon图标 title标题 message内容
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("这是标题");
//设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
}
});
//设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
}
});
//3设置单选列表 SingleChoiceItems单选 (参数:数据源,默认选中下标,点击监听)
final String[] datas = {"男", "女", "不详"};
builder.setSingleChoiceItems(datas, 2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你选中的是:" + datas[i], Toast.LENGTH_SHORT).show();
}
});
//4.使用建造者创建对话框
AlertDialog dialog = builder.create();
//5.显示
dialog.show();
}
多选对话框
多选对话框 NegativeButton 与单选区别就是一个词语
//多选对话框
private void mulite_dialog() {
//1.构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//2.设置属性 icon图标 title标题 message内容
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("这是标题");
//设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
}
});
//设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
}
});
//3.设置多选列表 SingleChoiceItems单选 (参数:数据源,默认选中状态,点击监听)
final String[] datas = {"吃饭", "睡觉", "打豆豆"};
final boolean[] flags = {false, true, true};
builder.setMultiChoiceItems(datas, flags, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
Toast.makeText(MainActivity.this, "你选中的是:" + datas[i], Toast.LENGTH_SHORT).show();
}
});
//4.使用建造者创建对话框
AlertDialog dialog = builder.create();
//5.显示
dialog.show();
}
自定义内容对话框
仅改变内容 内容布局可随意更改
<?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">
<TextView
android:id="@+id/tv"
android:text="自定义内容(图片素材)"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv"
android:src="@mipmap/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
//自定义内容对话框
private void custom_dialog() {
//1.获取布局视图
View inflate = LayoutInflater.from(this).inflate(R.layout.custom_layout, null);
//2.构建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//属性
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("这是标题");
//设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
}
});
//设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
}
});
//3.设置自定义布局
builder.setView(inflate);
//4.使用建造者创建对话框
AlertDialog dialog = builder.create();
//5.显示
dialog.show();
}
水平进度条对话框
实例进度条对象 用style变换样式 系统自带的样式 STYLE_HORIZONTAL
//水平进度条对话框
private void hor_progress_dialog() {
//1.实例化对象 进度条对话框 ProgressDialog
final ProgressDialog dialog = new ProgressDialog(this);
//2.设置属性 ProgressStyle进度条样式 Max进度条最大值 Message提示语
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(100);
dialog.setMessage("正在下载");
//3.显示
dialog.show();
//4.定时器 模拟下载过程使进度条动
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
//进度条状态初始为0
int progreess = 0;
@Override
public void run() {
//进度条状态超出最大值执行 停止计时器 消失对话框
if (progreess >= 100) {
//对话框撤销
dialog.dismiss();
//计时器取消
timer.cancel();
}
//每次进度为20 共100
dialog.setProgress(progreess += 20);
}
//0秒够执行,每隔1000毫秒执行一次,也就是每秒执行一次
}, 0, 1000);
}
圆形进度条对话框
实例进度条对象 用style变换样式 系统自带的样式 STYLE_SPINNER
//圆形进度条对话框
private void spi_progress_dialog() {
//1.实例化对象 进度条对话框 ProgressDialog
final ProgressDialog dialog = new ProgressDialog(this);
//2.设置属性 ProgressStyle进度条样式 Max进度条最大值 Message提示语
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//圆形
dialog.setMax(100);
dialog.setMessage("正在下载");
//3.显示
dialog.show();
//4.定时器 模拟下载过程使进度条动
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
//进度条状态初始为0
int progreess = 0;
@Override
public void run() {
//进度条状态超出最大值执行 停止计时器 消失对话框
if (progreess >= 100) {
//对话框撤销
dialog.dismiss();
//计时器取消
timer.cancel();
}
//每次进度为20 共100
dialog.setProgress(progreess += 20);
}
//0秒够执行,每隔1000毫秒执行一次,也就是每秒执行一次
}, 0, 1000);
}
日期选择对话框
系统自带的日期对话框 默认样式由版本决定
//日期对话框
private void data_dialog() {
//1.实例化日历对象 获取系统日期
Calendar calendar = Calendar.getInstance();
//2. DatePickerDialog日期选择对话框
DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
Toast.makeText(MainActivity.this, year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
}
//YEAR 年 MONTH月 DAY_OF_MONTH日
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
//3.显示
dialog.show();
}
时间选择对话框
系统自带的日期对话框 默认样式由版本决定
//时间选择对话框
private void time_dialog() {
//1.实例化日历对象 获取系统时间
Calendar calendar = Calendar.getInstance();
//2.TimePickerDialog时间选择对话框
TimePickerDialog dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
Toast.makeText(MainActivity.this, hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
}
//HOUR小时 MINUTE分钟 是否24小时制
}, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), true);
//3.显示
dialog.show();
}
二、自定义对话框(重难点)
自定义布局 custom_dialog_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#11ffffff">
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text="设置新标题"
android:textColor="#38ADFF"
android:textSize="16sp" />
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="20dp"
android:text="设置新内容" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="15dp"
android:background="#E4E4E4" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<Button
android:id="@+id/no"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:lines="1"
android:text="取消"
android:textColor="#FF0A0A"
android:textSize="16sp" />
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#E4E4E4" />
<Button
android:id="@+id/yes"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:lines="1"
android:text="确定"
android:textColor="#3DE444"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
通过自定义接口实现调用 MainActivity.class
//自定义对话框
private void custom_dialog() {
CustomActivity custom = new CustomActivity(this);
//设置新文本
custom.setStrTitle("警告");
custom.setStrMessage("程序员的快乐你想象不到!");
//设置点击监听
custom.setYesClicjListener(new CustomActivity.YesClicjListener() {
@Override
public void yesClick() {
Toast.makeText(MainActivity.this, "222", Toast.LENGTH_SHORT).show();
}
});
custom.setNoClicjListener(new CustomActivity.NoClicjListener() {
@Override
public void noClick() {
Toast.makeText(MainActivity.this, "取消按钮", Toast.LENGTH_SHORT).show();
}
});
//显示
custom.show();
}
自定义接口实现 传参 CustomActivity.class
package com.bawei.test01;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
//继承Dialog
public class CustomActivity extends Dialog {
private TextView title;
private TextView message;
private Button no;
private Button yes;
//自定义参数
private String strTitle, strMessage;
public String getStrTitle() {
return strTitle;
}
public void setStrTitle(String strTitle) {
this.strTitle = strTitle;
}
public String getStrMessage() {
return strMessage;
}
public void setStrMessage(String strMessage) {
this.strMessage = strMessage;
}
//-------
//自定义接口 确定按钮功能
public interface YesClicjListener {
void yesClick();//调用的方法
}
//申明一个成员
private YesClicjListener yesClicjListener;
//set get方法
public YesClicjListener getYesClicjListener() {
return yesClicjListener;
}
public void setYesClicjListener(YesClicjListener yesClicjListener) {
this.yesClicjListener = yesClicjListener;
}
//自定义接口 取消按钮功能
public interface NoClicjListener {
void noClick();
}
//申明一个成员
private NoClicjListener noClicjListener;
//set get方法
public NoClicjListener getNoClicjListener() {
return noClicjListener;
}
public void setNoClicjListener(NoClicjListener noClicjListener) {
this.noClicjListener = noClicjListener;
}
//---------------
public CustomActivity(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_dialog_layout);
//初始化控件
initViews();
//数据不为空 这设置新文本
if (strMessage != null) {
//设置新消息数据
message.setText(strMessage);
}
if (strTitle != null) {
//设置新消息标题
title.setText(strTitle);
}
//确定按钮监听
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();//撤销
}
});
//取消按钮监听
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();//撤销
}
});
}
private void initViews() {
title = (TextView) findViewById(R.id.title);
message = (TextView) findViewById(R.id.message);
no = (Button) findViewById(R.id.no);
yes = (Button) findViewById(R.id.yes);
}
}