今天分享一个有关Dialog的控件,由于Dialog的种类和形式很多,系统提供的已经能满足开发需要 这里给大家详细的总结一下 :
先说一下Dialog : 就是对话框 上个图,
总结Dialog有几种比较常用的形式:
1. AlertDialog (非常强大 功能丰富)
2.ProgressDialog (从名字就能看出 是做进度条用的)
3.DatePickerDialog(这个也不难看出 是做时间选择的, 看效果真是震惊了宝宝)
4.TimePickerDialog (虽然列出来 但不打算写它 )
今天介绍AlertDialog , 有六种
第一种: 简单对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置对话框标题
builder.setTitle("简单对话框");
//设置图标
builder.setIcon(R.mipmap.ic_launcher);
//设置对话框内容 \n 可以直接换行
builder.setMessage("对话框的内容\n 换行了");
//设置确定按钮 和 按钮的点击事件
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击确定后
Toast.makeText(AlertDlgActivity.this, "点击了确定", Toast.LENGTH_SHORT).show();
}
});
//设置取消按钮 和 按钮的点击事件
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击取消后
Toast.makeText(AlertDlgActivity.this, "点击了取消", Toast.LENGTH_SHORT).show();
}
});
//创建并显示
builder.create().show(); //如果把按钮设置在create之后 就不会显示了
⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️⬆️
就长最上面那样 就不上图了
第二种 : 简单列表对话框
我定义了一个items 一下用到列表的 都用这个了~
private final String[] items= {"Android","iOS","h5"};
代码如下 :
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("简单列表对话框").setIcon(R.mipmap.ic_launcher); builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(AlertDlgActivity.this, "选中了" + items[which], Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
第三种:单选列表项对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("单选列表对话框").setIcon(R.mipmap.ic_launcher); // 设置单选列表项, 默认选中第二项 builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); //设置确定按钮 和 按钮的点击事件 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) { //点击取消后 } }); builder.create().show();
第四种: 多选列表对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("多选列表对话框").setIcon(R.mipmap.ic_launcher); //参数2: boolean[] 有两个作用 : // 1.设置初始化时选中哪个列表项 // 2.动态的获取多选列项中的选中状态 builder.setMultiChoiceItems(items, new boolean[]{true, false, false}, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Log.i("mmmmkkkk", "+++" + items[which] + " ---- " + isChecked);
} }); builder.create().show();
第五种:自定义列表项对话框
从名字上可以看出, 我们可以自己定义这个列表项的样子 ,那就简单定义最基本的 里边只有一个TextView 的列表项
需要注意的是: 这需要一个Adapter 适配器 就像我们做ListView那样
以下是Adapter的代码 ,继承了BaseAdapter
/**
* Created by Cocoamk on 16/1/22.
*/
public class MyBuliderAdapter extends BaseAdapter {
private String[] data;
private Context context;
@Override
public int getCount() {
return data.length;
}
@Override
public Object getItem(int position) {
return data[position];
}
@Override
public long getItemId(int position) {
return position;
}
public MyBuliderAdapter(String[] data, Context context) {
this.data = data;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//在这绑定布局 convertView = LayoutInflater.from(context).inflate(R.layout.array_item,null); TextView textView = (TextView) convertView.findViewById(R.id.item_text); textView.setText(data[position]); return convertView; } }
在Java代码中:
//AlertDialog.Bulder提供了一个setAdapterde()的方法 设置对话框的内容 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("自定义列表项对话框").setIcon(R.mipmap.ic_launcher);//创建适配器 MyBuliderAdapter adapter = new MyBuliderAdapter(items, this); //setAdapter 可以传入ArrayAdapter SimpleAdapter BaseAdapter 的对象 builder.setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(AlertDlgActivity.this, "--" + items[which], Toast.LENGTH_SHORT).show(); } }); builder.create().show();
第六种: 自定义View 对话框
//在代码中我们不难看出, 给自定义的View 注入一个布局 ,就可以直接setView() ,这里写了一个TableLayout的布局 不知是否常用
TableLayout login = (TableLayout) getLayoutInflater().inflate(R.layout.login_item,null); new AlertDialog.Builder(this) .setTitle("自定义View对话框") .setIcon(R.mipmap.ic_launcher) .setView(login) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create().show();
XML代码如下:
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/loginForm"> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="输入用户名"/> <EditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" /> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="输入密码"/> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" /> </TableRow> </TableLayout>至此, 6中AlertDialog的基本用法就都会用啦~ 希望对大家有帮助
}