一日不见,如隔三秋,大家好,小编今天又要分享好东西来了,这次给大家带来很常用到的控件Dialog对话框,有四种样式,分别是标准对话框,菜单对话框,复选对话框,自定义对话框,今天就不讲自定义对话框,因为涉及到的知识点多,我打算明天再写一遍详细的自定义对话框博客,这也是这四种最重要的一种,分一篇跟大家探讨,别的不说,小二,上今天代码运行成功的界面。
好了,界面已经放上去了,相信大家非常感兴趣是怎样弄出这个效果,心急吃不了热豆腐哈,接下来,我慢慢道来~~
第一种:标准对话框
/**
* 标准对话框
*/
private void stand() {
//创建AlertDialog对象
AlertDialog.Builder builder = new Builder(context)
//设置对话框的图标
.setIcon(R.drawable.emoji_100)
//设置对话框的标题
.setTitle("标准对话框")
//设置对话框的提示信息
.setMessage("你吃了吗?")
//设置确定按钮,用setPositiveButton方法
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
// 参数一:Dialog 参数二:点击选择的一列,可以理解为索引号的意思
public void onClick(DialogInterface dialog, int which) {
//吐司提示框,上篇博客有介绍到,这是标准的Toast,非自定义
Toast.makeText(DialogActivity.this, "确定成功",
Toast.LENGTH_SHORT).show();
}
})
//设置取消按钮,参数二:是一个监听事件, 需写上DialogInterface才能new出一个监听
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this, "取消成功",
Toast.LENGTH_SHORT).show();
}
});
//创建对象Dialog对象
AlertDialog dialog = builder.create();
//Dialog展示
dialog.show();
}
}
第二种:菜单对话框
/**
* 菜单对话框
*/
private void menuDialog() {
//创建一个数组,存放找到资源xml文件下的item,这里item里面有的是显示的数据
final String[] stringArray = getResources().getStringArray(R.array.eat);
//创建AlertDialog,这里用的是链式方式,开发中是最常用到的
new AlertDialog.Builder(context).setIcon(R.drawable.emoji_101)
.setTitle("菜单对话框")
//创建监听,因为这里是菜单对话框,用到的是setItems , 第一个参数:资源ID或要显示的数组数据
.setItems(stringArray, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//第二个参数:点击选择的数组的某一项,which表示索引号
Toast.makeText(DialogActivity.this, stringArray[which],
Toast.LENGTH_SHORT).show();
}
//生成并展示对话框
}).create().show();
}
第三种:复选对话框
/**
* 复选对话框
*/
private void multDialog() {
//获取xml定义的数组
final String[] stringArray = getResources().getStringArray(R.array.eat);
new AlertDialog.Builder(context)
.setIcon(R.drawable.emoji_102)
.setTitle("复选对话框")
/** 复选对话框监听事件
*第一个参数:设置复选项itemsId
*第二个参数:复选项的选择状态,所有复选项的默认值是false,但必须与复选项的长度相对应,不然会数组越界
*/
.setMultiChoiceItems(R.array.eat,
new boolean[] { true, true, false, false },
new DialogInterface.OnMultiChoiceClickListener() {
//参数三:是否被选择
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
//获取xml被点击选中的值
String itemStr = stringArray[which];
Toast.makeText(DialogActivity.this,
itemStr + "" + isChecked,
Toast.LENGTH_SHORT).show();
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//当点击复选对话框按钮,则应当获取复选项
//创建AlertDialog对象
AlertDialog alertDialog = (AlertDialog) dialog;
//取得复选框的ListVIew
ListView listView = alertDialog.getListView();
//通过listView获取稀疏布尔值数组
SparseBooleanArray checkedItemPositions = listView
.getCheckedItemPositions();
//这里SparseBooleanArray相同与hashmap ,key表示(integer:position)value(状态:boolean)
int size = checkedItemPositions.size();
//创建合并器
StringBuilder sb = new StringBuilder();
//for循环,拿到稀疏布尔值的每一个值
for (int i = 0; i < size; i++) {
//判断取出稀疏布尔值的每一个值
if (checkedItemPositions.valueAt(i)) {
//稀疏布尔值的索引号
int position = checkedItemPositions.keyAt(i);
// 获取每个索引号的值,用getAdapter装载数据
//得到每一个索引号的值,用getAdapter装载数据
String selectItem = listView.getAdapter()
.getItem(position).toString();
//获得的字符串合并
sb.append(selectItem);
}
}
Toast.makeText(DialogActivity.this, sb.toString(),
Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).create().show();
}
今天的讲解差不多要告一段落了,主要讲了对话框的三种样式,其中第三种复选对话框是重中之重,也是难点所在。读者可以慢慢感悟其中的道理,多敲代码体会场景,多动手反正是没坏处的,第四种自定义对话框明天跟大家见面,敬请期待,好了,今天就到这里了,晚安了,程序猿们。。。