Android 各种dialog的使用
一、序言:
Android 开发中我们常常用到各种各样的dialog 在Android 中dialog 分为
普通对话框
列表对话框
private void showDialog() {
final String[] stars = new String[]{"笑着马力", "哟段东西", "无法无天"};
new AlertDialog.Builder(this)
.setTitle("请选择")
.setItems(stars, new DialogInterface.OnClickListener() { //setItems 是列表对话框的核心
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "" + stars[index], Toast.LENGTH_SHORT).show();
}
}).show();
}
单选对话框
这儿定义int index 的原因 在于 我们点击了某个具体的item 比如说点击了 “笑着马力”,它会自动选择 ,而我想要的效果是点击确定之后才进行选择 ,所以这儿通过索引赋值实现
int index = 0;
private void showDialog() {
final String[] stars = new String[]{"笑着马力", "哟段东西", "无法无天"};
new AlertDialog.Builder(this)
.setTitle("请选择")
.setSingleChoiceItems(stars, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
index = which;
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "" + stars[index], Toast.LENGTH_SHORT).show();
}
});
}
多选对话框
private void showDialogDUo() {
final String[] stars = new String[]{"笑着马力", "哟段东西", "无法无天"};
final boolean[] checks = {true, false, true};
new AlertDialog.Builder(this)
.setTitle("请选择")
.setMultiChoiceItems(stars, checks, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checks[which] = isChecked;
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < checks.length; i++) {
String str = "您选择了...";
if (checks[i]) {
str += stars[i] + "";
}
}
}
});
}
等待对话框
private void showDialog() {
//进度对话框,默认样式为转圈
ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("加载中");
dialog.setMessage("请等待");
dialog.setCancelable(true); //默认回true 表示点击空白是否消失
dialog.show();
}
进度条对话框
这儿开启线程只是为了测试进度条的正常读条
private void showDialog() {
//进度对话框,默认样式为转圈
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("加载中");
dialog.setMessage("请等待");
// 设置进度模糊,就是人家看不到进度
dialog.setIndeterminate(true);
// 设置默认样式为水平
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setCancelable(true); //默认回true 表示点击空白是否消失
dialog.show();
new Thread(){
@Override
public void run() {
super.run();
for (int i = 0; i < 100; i++) {
dialog.setProgress(i);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
dialog.dismiss();
}
}.start();
}
自定义dialog
稍微复杂一点
第一步、自定义MyDialog 继承自 Dialog 在构造方法中调用 setContentView(int layoutId)来设置自己想要的布局
public class MyDialog extends Dialog {
public MyDialog(@NonNull final Context context) {
super(context);
//设置自己想要的布局
setContentView(R.layout.my_dialog);
}
}
第二步、实例化MyDialog 并显示
MyDialog myDialog = new MyDialog(this);
myDialog.show();
这儿就已经显示出来了,但是显示出来的上面有一个白色的边框 那是 dialog 自带的主题样式,如果我们要使用自己的样式,就需要自己定义的样式,所以:
第三步、在资源文件styles 中定义自己的样式
<style name="myDialog">
//设置dialog 没有白色的头部
<item name="android:windowNoTitle">true</item>
//设置dialog 自带的背景为透明
<item name="android:windowBackground">@android:color/transparent</item>
</style>
然后在MyDialog 的构造方法中引入风格
public class MyDialog extends Dialog {
public MyDialog(@NonNull final Context context) {
super(context,R.style.myDialog); //这儿引入主体
setContentView(R.layout.my_dialog);
Button mBtCancel=findViewById(R.id.bt_cancel);
Button mBtSure=findViewById(R.id.bt_sure);
mBtCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
mBtSure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "确定", Toast.LENGTH_SHORT).show();
}
});
}
}
到这儿自定义dialog 就完成了