样式一:简单对话框
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c847c8db84978188869d6ed6abfc21b5.jpeg)
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// 设置Title的图标
builder.setIcon(R.drawable.ic_launcher);
// 设置Title的内容
builder.setTitle("弹出警告框");
// 设置Content来显示一个信息
builder.setMessage("确定删除吗?");
// 设置一个PositiveButton
builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show();
}
});
// 设置一个NegativeButton
builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show();
}
});
// 设置一个NeutralButton
builder.setNeutralButton("忽略", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(MainActivity.this, "neutral: " + which, Toast.LENGTH_SHORT).show();
}
});
// 显示出该对话框
builder.show();
}
});
which表示的是action button所代表的int值,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。
样式二:列表对话框
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b74f5f8267443a3b42d59b1165292038.jpeg)
button2.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("选择一个城市");
// 指定下拉列表的显示数据
final String[] cities = {"广州", "上海", "北京", "香港", "澳门"};
// 设置一个下拉的列表选择项
builder.setItems(cities, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
});
当选中一个选项时,对话框就会消失掉。这里的which代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。
样式三:单选对话框
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f4ccf3ef7125f3c876b90e0833019aa2.jpeg)
button3.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("请选择性别");
final String[] sex = {"男", "女", "未知性别"};
// 设置一个单项选择下拉框
/**
* 第一个参数指定我们要显示的一组下拉单选框的数据集合
* 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上
* 第三个参数给每一个单选项绑定一个监听器
*/
builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();
}
});
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.show();
}
});
在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失。
样式四:复选对话框
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bcd1d419272768b49fe9160b9d3a6336.jpeg)
button4.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("爱好");
final String[] hobbies = {"篮球", "足球", "网球", "斯诺克"};
final boolean checkedItems[] = {true, false, true, false};
// 设置一个单项选择下拉框
/**
* 第一个参数指定我们要显示的一组下拉多选框的数据集合
* 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
* 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
* 第三个参数给每一个多选项绑定一个监听器
*/
builder.setMultiChoiceItems(hobbies, checkedItems, new DialogInterface.OnMultiChoiceClickListener()
{
StringBuffer sb = new StringBuffer(100);
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked)
{
if(isChecked)
{
sb.append(hobbies[which] + ", ");
}
Toast.makeText(MainActivity.this, "爱好为:" + sb.toString(), Toast.LENGTH_SHORT).show();
}
});
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.show();
}
});
同样,对于下拉多选框,当我们选中其中一个选项时,对话框是不会消失的,只有点击了action button才会消失。
样式五:内容部分自定义的对话框
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1c0ea0c1545233a001335f0f00e84216.jpeg)
button5.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("请输入用户名和密码");
// 通过LayoutInflater来加载一个xml的布局文件作为一个View对象
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
// 设置我们自己定义的布局文件作为弹出框的Content
builder.setView(view);
final EditText username = (EditText)view.findViewById(R.id.username);
final EditText password = (EditText)view.findViewById(R.id.password);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String a = username.getText().toString().trim();
String b = password.getText().toString().trim();
// 将输入的用户名和密码打印出来
Toast.makeText(MainActivity.this, "用户名: " + a + ", 密码: " + b, Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
}
});
builder.show();
}
});
样式六:完全自定义的对话框
1,首先我们需要自定义Dialog的style,让他自己本有的东西全部透明,然后在设置我们自己的内容就可以达到完全自定义的效果了
@android:color/transparent
@null
true
true
false
@null
@style/normalDialogAnim
true
@anim/normal_dialog_enter
@anim/normal_dialog_exit
进入动画:
离开动画:
2,接下来就可以为对话框设置我们自定义的style了
/**
* 自定义对话框
*/
private void customDialog() {
final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);
View view = View.inflate(this, R.layout.dialog_normal, null);
TextView cancel = (TextView) view.findViewById(R.id.cancel);
TextView confirm = (TextView) view.findViewById(R.id.confirm);
// 设置自定义的布局
dialog.setContentView(view);
//使得点击对话框外部不消失对话框
dialog.setCanceledOnTouchOutside(true);
//设置对话框的大小
view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.CENTER;
dialogWindow.setAttributes(lp);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
将Dialog放置在屏幕中间lp.gravity = Gravity.CENTER;并设置他的宽度为屏幕的75%lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f); 3,这里使用到了一个工具类用来计算手机屏幕的宽高,如下代码:
public class ScreenSizeUtils {
private static ScreenSizeUtils instance = null;
private int screenWidth, screenHeight;
public static ScreenSizeUtils getInstance(Context mContext) {
if (instance == null) {
synchronized (ScreenSizeUtils.class) {
if (instance == null)
instance = new ScreenSizeUtils(mContext);
}
}
return instance;
}
private ScreenSizeUtils(Context mContext) {
WindowManager manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;// 获取屏幕分辨率宽度
screenHeight = dm.heightPixels;// 获取屏幕分辨率高度
}
//获取屏幕宽度
public int getScreenWidth() {
return screenWidth;
}
//获取屏幕高度
public int getScreenHeight() {
return screenHeight;
}
}
自定义对话框实例:
1,先来码这个对话框的布局,dialog_bottom.xml里面就放置了三个按钮:
2,接下来就可以为我们的对话框加载这个布局了
Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);
View view = View.inflate(this, R.layout.dialog_bottom, null);
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(true);
view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
dialogWindow.setAttributes(lp);
dialog.show();
上面这一段带代码的关键就是将Dialog放置在屏幕底部lp.gravity = Gravity.BOTTOM;并设置他的宽度为屏幕的90%lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);
|