很早之前写过一篇
自定义提示信息Dialog
如图:
这个形式也是最常用的,不过最近需要用到列表信息Dialog
,原生的不光样式不能满足需求,而且是开发电视端的APP,需要对焦点进行特殊处理,所以就需要自定义Dialog
我们先来看一下系统自带的列表Dialog。
我们先来看第一种:
最简单的一种,没有当前状态,只有列表,选中之后弹框就会消失(非手动调用dialog.dismiss()
)
代码如下:
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setItems(new String[]{"科目一", "科目二", "科目三"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"选择了第"+which+"个",Toast.LENGTH_SHORT).show();
}
}).create();
alertDialog.show();
这种列表会有checked提示,setSingleChoiceItems()
中第二个参数就是控制第几个被选中,而且点击之后不会自动消失,需要手动调用dialog.dismiss()
,有时会配合setNegativeButton()、setPositiveButton
等一起使用。
代码如下:
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setSingleChoiceItems(new String[]{"科目一", "科目二", "科目三"}, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"选择了第"+which+"个",Toast.LENGTH_SHORT).show();
}
}).create();
alertDialog.show();
这种列表也会有checked提示,而且是多选框,setSingleChoiceItems()
的第二个参数是boolean数组,控制哪些被选中。而且点击之后也不会自动消失,需要手动调用dialog.dismiss()
,有时会配合setNegativeButton()、setPositiveButton()
等一起使用。
代码如下:
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setMultiChoiceItems(new String[]{"科目一", "科目二", "科目三"}, new boolean[]{true, false, true}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(MainActivity.this,"选择了第"+which+"个",Toast.LENGTH_SHORT).show();
}
}).create();
alertDialog.show();
看了系统自带的效果你会发现不能满足UI的效果,那么接下来进行我们的自定义。
item布局文件dialog_item.xml
代码
图片选中效果diglog_sel.xml
代码
我这里只是传递一些简单的数据到adapter,具体看实际业务传递不同的数据,控制不同的效果。
public class DialogItemAdapter extends BaseAdapter {
//这里可以传递个对象,用来控制不同的item的效果
//比如每个item的背景资源,选中样式等
public List list;
LayoutInflater inflater;
public DialogItemAdapter(Context context, List list) {
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public String getItem(int i) {
if (i == getCount() || list == null) {
return null;
}
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.dialog_item, null);
holder.typeTextview = (TextView) convertView.findViewById(R.id.typeTextview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.typeTextview.setText(getItem(position));
return convertView;
}
public static class ViewHolder {
public TextView typeTextview;
}
}
DialogItemAdapter adapter = new DialogItemAdapter(MainActivity.this, iniDatas());
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setSingleChoiceItems(adapter, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
alertDialog.show();
public List iniDatas() {
List list = new ArrayList();
list.add("科目一");
list.add("科目二");
list.add("科目三");
return list;
}
博主这个dialog要在TV上使用,所以可以看到通过上下键控制选中的时候右边会有一个选中箭头,然后在点击的时候dismiss
。
更多效果等待你可自行打造你的专属Dialog。
扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~
公众号回复“资料获取”,获取更多干货哦~
有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码