AlertDialog简介
AlertDialog又叫警告对话框,是各种对话框中功能最丰富使用最广泛的一种,虽然翻译过来叫警告对话框,但作用却不仅仅只是警告。AlertDialog需要通过Builder类的实例调用create方法创建实例
Builder是AlertDialog的一个静态内部类,主要用于设置AlertDialog,部分方法与AlertDialog的方法功能一样
AlertDialog的基本方法
void show()方法 //调用此方法后显示当前引用所对应的对话框,同时DialogInterface.OnCancelListener被执行
void dismiss()方法 //关闭对话框,同时DialogInterface.OnCancelListener被执行
void setOnCancelListener(final OnCancelListener listener) //设置对cancel事件的监听器
void setOnDismissListener //设置对dismiss事件的监听器
设置AlertDialog的基本方法
setTitle(CharSequence title) //设置AlertDialog的标题
setIcon(int iconId) //设置AlertDialog的图标(在title的左边)
setMessage(CharSequence message) //设置AlertDialog的提醒信息
AlertDialog内置了三个按钮,分别是肯定(positive),否定(negative)和中立(neutral)
使用 setXxxButton方法(只能通过Builder实例调用)设置即可,需要传入字符串(按钮的文字)和一个按钮的监听器
为AlertDialog添加列表
AlertDialog内部实现的ListView的功能,在外部只需通过Builder实例调用这个方法即可
public Builder setItems(CharSequence[] items, final OnClickListener listener)
itmes为列表中每行的内容,listener为监听器
一般会实现DialogInterface.OnClickListener作为监听器并重写public void onClick(DialogInterface dialog, int which)方法
which为列表中被点击的行的索引 从零开始
为AlertDialog添加单选组
AlertDialog内部同样也实现了RadioGroup的功能,在外部通过Builder实例调用这个方法即可
public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem,final OnClickListener listener)
items是每个单选项的名字,checkedItem是指默认被选中的选项,0代表第一个选项,以此类推注:此方法需要使用Builder实例调用
为AlertDialog添加多选项
AlertDialog内部也通过CheckBox实现了多选选项的功能,外部通过Builder实例调用下面的方法即可使用此功能
public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)items是每个选项的名字,checkedItems是一个布尔数组用于指定每个选项的默认值,值为选中/非选中(true/false),
注:此方法需要使用Builder实例调用
自定义AlertDialog
当AlertDialog自带的样式无法满足我们的需要时,就可能要使用自定义的AlertDialog了
原理:自定义一个布局然后把它动态加载到AlertDialog中主要步骤
①在res/layout下写好自定义的XML文件
②使用LayoutInflater类的方法inflate找到布局并加载,返回一个View对象
例View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.login,null)
③使用setView方法将找到的View设置为Dialog的样式,同时也可可以通过之前找到的view对象来找到布局文件中的控件为其设置响应事件
inflate方法和findViewById的区别
LayoutInflater用来寻找res/layout/下的xml布局文件,并且实例化
findViewById是找xml布局文件下的具体widget控件(如Button、TextView等)
①对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
②对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的控件。