文章目录
Dialog常用对话框
AlertDialog
创建一个对话框
AlertDialog.Builder builder = new AlertDialog.Builder(当前Activity.this);
// 所有的设置...
builder.create(); // 创建AlertDialog
通用属性
/**
* @param1 按钮的文字
* @param2 设置点击事件
/
builder.setPositiveButton("文本",new DialogInterface.OnClickListener(
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击事件
}
)); // 设置积极按钮
builder.setNegativeButton("文本",new DialogInterface.OnClickListener(
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击事件
}
)); // 设置消极按钮
alertDialog.show(); // 显示对话框
alertDialog.dismiss(); // 消除对话框
普通对话框
属性
builder.setTitle("title"); // 设置对话框的标题
builder.setIcon(); // 设置图标
builder.setMessage(“content”); // 设置内容
单选对话框
关键属性
/** 常用构造方法
* No.1 CharSequence[] items, int checkedItem, final OnClickListener listener
* 数组, 默认选择的item下标, 点击事件监听器
* No.2 ListAdapter adapter, int checkedItem, final OnClickListener listener
* 适配器, 默认选择的item下标, 点击事件监听器
/
builder.setSingleChoiceItems()
多选对话框
关键属性
/** 常用构造方法
* No.1 CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener
* 数组, 默认选择的item条目, 点击事件监听器
* No.2 ListAdapter adapter, int checkedItem, final OnClickListener listener
* 适配器, 默认选择的item条目, 点击事件监听器
/
builder.setMultiChoiceItems();
自定义对话框
写一个简单的布局
<?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">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
关键代码
// 填充布局
View inflate = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout, null);
// 获取控件
ImageView imageView = inflate.findViewById(R.id.img);
builder.setView(inflate); // 给dialog设置布局
完全自定义对话框
1.写一个布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="300dp"
android:layout_height="155dp"
android:layout_gravity="center"
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="15dp"
android:text="@string/title"
android:textColor="#60b1f9"
android:textSize="18sp" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="22dp"
android:text="@string/content"
android:textSize="15sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp">
<Button
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ffffff"
android:text="@string/cancel"
tools:ignore="ButtonStyle" />
<Button
android:id="@+id/course"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ffffff"
android:text="@string/course"
tools:ignore="ButtonStyle" />
</LinearLayout>
</LinearLayout>
2.自定义MyDialog对象继承Dialog
public class MyDialog extends Dialog{}
3.完成自定义MyDialog
public class MyDialog extends Dialog {
// 声明所有布局中的控件
private TextView title;
private TextView content;
private Button cancel;
private Button course;
// 声明需要使用的字符串
private String titleStr;
private String contentStr;
private String cancelStr;
private String courseStr;
// 声明两个按钮监听器接口
private cancelOnClickListener cancelOnClickListener;
private courseOnClickListener courseOnClickListener;
// 重写父类构造
public MyDialog(@NonNull Context context) {
super(context);
}
// 所有字符串set方法
public void setTitleStr(String titleStr) {
this.titleStr = titleStr;
}
public void setContentStr(String contentStr) {
this.contentStr = contentStr;
}
public void setCancelStr(String cancelStr) {
this.cancelStr = cancelStr;
}
public void setCourseStr(String courseStr) {
this.courseStr = courseStr;
}
/**
* 监听器的两套set方法
* No.1 设置点击事件
* No.2 设置点击事件同时设置按钮文字
*/
public void setCancelOnClickListener(MyDialog.cancelOnClickListener cancelOnClickListener) {
this.cancelOnClickListener = cancelOnClickListener;
}
public void setCourseOnClickListener(MyDialog.courseOnClickListener courseOnClickListener) {
this.courseOnClickListener = courseOnClickListener;
}
public void setCancelOnClickListener(String content, MyDialog.cancelOnClickListener cancelOnClickListener) {
this.cancelStr = content;
this.cancelOnClickListener = cancelOnClickListener;
}
public void setCourseOnClickListener(String content, MyDialog.courseOnClickListener courseOnClickListener) {
this.courseStr = content;
this.courseOnClickListener = courseOnClickListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.diy_dialog);
// 初始化控件
initView();
// 对自定义dialog进行设置
initData();
// 设置按钮的点击事件
initEvent();
}
// 设置按钮的点击事件
private void initEvent() {
cancel.setOnClickListener(v -> cancelOnClickListener.onClick());
course.setOnClickListener(v -> {
courseOnClickListener.onClick();
dismiss();
});
}
// 对自定义dialog进行设置
private void initData() {
title.setText(titleStr);
content.setText(contentStr);
cancel.setText(cancelStr);
course.setText(courseStr);
}
// 初始化控件
private void initView() {
title = findViewById(R.id.title);
content = findViewById(R.id.content);
cancel = findViewById(R.id.cancel);
course = findViewById(R.id.course);
}
// 监听器接口
public interface cancelOnClickListener {
public void onClick();
}
public interface courseOnClickListener {
public void onClick();
}
}
4.使用自定义dialog
MyDialog myDialog = new MyDialog(this);
myDialog.setTitleStr("贪玩蓝月");
myDialog.setContentStr("是兄弟就来砍我");
myDialog.setCancelStr("别了");
myDialog.setCourseStr("好的");
myDialog.setCancelOnClickListener(() -> Toast.makeText(MainActivity.this, "取消被点击", Toast.LENGTH_SHORT).show());
myDialog.setCourseOnClickListener("这就来", () -> Toast.makeText(MainActivity.this, "确认被点击", Toast.LENGTH_SHORT).show());
myDialog.show();
日期选择对话框
关键代码
Calendar calendar = Calendar.getInstance(); // 获取日历对象
/**
* 构造方法
* 上下文,事件设置监听器,默认选中的年、月、日
* @NonNull Context context, @Nullable OnDateSetListener listener, int year, int month, int dayOfMonth
*/
DatePickerDialog datePickerDialog = new DatePickerDialog(this, (view1, year, month, 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));
时间选择对话框
关键代码
Calendar calendar1 = Calendar.getInstance();
/**
* 构造方法
* 上下文,事件设置监听器,默认选中的时、分,是否使用24小时制
* Context context, OnTimeSetListener listener, int hourOfDay, int minute,
boolean is24HourView
*/
new TimePickerDialog(MainActivity.this, (view12, hourOfDay, minute) -> Toast.makeText(MainActivity.this, hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show(), calendar1.get(Calendar.HOUR), calendar1.get(Calendar.MINUTE), true).show();
ProgressDialog(进度条对话框)
水平条对话框
代码实现
//水平进度条
private void hor_progress_dialog() {
// 实例化对象
final ProgressDialog dialog=new ProgressDialog(this);
// 设置属性
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+=20);
}
},0,1000); // 0秒后执行,每隔1000毫秒执行一次
}
圆形进度条对话框
代码
private void hor_progress_dialog() {
// 实例化对象
final ProgressDialog dialog=new ProgressDialog(this);
// 设置属性
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//设置圆圈 模糊进度
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+=20);
}
},0,1000); // 0秒后执行,每隔1000毫秒执行一次
}