AlertDialog

提示框,适合简单的提示和操作

没有生命周期

创建

采用support包下的类创建,保证都是最新的样式

字体,按钮等效果都是主题默认的样式

1
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);

标题

1
builder.setTitle("标题");

内容

注意:当有了内容后设置单选或多选列表不起作用

1
builder.setMessage("内容");

图标

在标题左侧

1
builder.setIcon(R.mipmap.ic_launcher);

显示隐藏

1
2
3
4
5
6
7
8
9
10
builder.show();
//获得dialog对象
AlertDialog alertDialog = builder.create();
alertDialog.dismiss();
//可以点击空白,或按返回键消失
builder.setCancelable();
//取消监听
builder.setOnCancelListener();
//隐藏监听
builder.setOnDismissListener();

按钮

默认点击按钮后,弹窗隐藏

确认按钮

1
2
3
4
5
6
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});

取消按钮

1
2
3
4
5
6
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});

其它按钮

在确认和取消之间

1
2
3
4
5
6
builder.setNegativeButton("其它", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});

列表

普通列表

1
2
3
4
5
6
builder.setItems(new String[]{"1", "2", "3"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "hello" + i, Toast.LENGTH_SHORT).show();
}
});

单选列表

1
2
3
4
5
6
7
8
//(数据项目,被选中项,点击)
//被选中项设置为-1,将默认不选择任何条目
builder.setSingleChoiceItems(new String[]{"1", "2", "3"}, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "hello" + i, Toast.LENGTH_SHORT).show();
}
});

多选列表

1
2
3
4
5
6
7
8
//(数据项目,被选中项目,点击)
//被选中列表可为null
builder.setMultiChoiceItems(new String[]{"1", "2", "3"}, new boolean[]{true, false, false}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
}
});

自定义列表

1
builder.setAdapter(adapter,listener);

自定义

添加view

1
2
//在message下设置一个布局
builder.setView(view,padding1,padding2,padding3,padding4);

样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.Light.Dialog.Alert"></style>
<!--自定义列表弹出的activity的样式 -->
<style name="FloateDialogBottom" type="text/css">
<!--动画设置-->
<item name="android:windowAnimationStyle">@style/AnimBottom</item>
<!--这个不设置的话,可能会出现边框黑线-->
<item name="android:windowContentOverlay">@null</item>
<!--Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 背景颜色 @android:color/transparent 透明-->
<item name="android:windowBackground">@android:color/background_light</item>
<!-- 模糊 -->
<item name="android:backgroundDimEnabled">true</item>
</style>

宽度和重心

1
2
3
4
5
6
7
8
9
Window win = dialog.getWindow();
//底部
win.setGravity(Gravity.BOTTOM);
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
//宽度填满
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
win.setAttributes(lp);