ALertDialog作为Android原生控件,使用简单方便,日常开发中,我们可能根据需求,实现不同的视觉效果,比如修改对话框显示位置,文字颜色和大小,对话框的宽高等,下面将讲述一些常用需求的解决方案
1 修改宽高和位置
AlertDialog dialog= new AlertDialog.Builder(mContext).create();
Window window = dialog.getWindow();
window.setGravity(Gravity.BOTTOM|Gravity.CLIP_HORIZONTAL); //设定dialog在屏幕上显示的位置
View container = LayoutInflater.from(mContext).inflate(R.layout.dialog_view,null);
dialog.setView(container);
dialog.show();
window.setLayout(600,200); //设定对话框的宽度为600,高度为200,一定要在show()方法之后使用,否则不生效
2 去除阴影效果
在android5.0以后的系统中,自定义的AlertDialog会出现阴影,去除的方式也很简单:
Dialog dialog = new AlertDialog.Builder(mContext).create();
dialog.show();
dialog.getWindow().setContentView(view);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable());//去除Android 5.0 以上的阴影问题
3 去除黑色背景
大部分情况下,我们需要对话框没有背景色,Android提供了两种方式实现,
1,自定义样式,
在项目的vaules/styles.xml文件中,自定义dialog的样式
<style name="curdialogTheme" parent="@android:style/Theme.DeviceDefault.Dialog">
.....
<item name="android:backgroundDimEnabled">false</item> //Dim:模糊的背景效果,
//上述属性决定是否有模糊的背景,true:有背景;false:无背景
.....
</style>
使用Theme.DeviceDefault.Dialog会有些风险,不同的手机厂商,可能会对此属性进行修改,以适配他们自己的Rom,一种替代方案是使用Theme.Holo.Dialog
2,设置window的属性
Window window = dialog.getWindow();
window.setDimAmount(0f);
3,去除黑色棱角
一般为了美观,自定义布局的时候,通常希望对话框的四个角为圆角,但是给布局设置样式后,四个角会出现棱角,解决办法如下:
getWindow().setBackgroundDrawable(new BitmapDrawable());
或者getWindow().setBackgroundDrawableResource(android.R.color.transparent);
4 取消属性
Dialog提供了两种取消属性设置,
1, dialog弹出后会点击屏幕或物理返回键,dialog不消失
dialog.setCancelable(false);
2, dialog弹出后会点击屏幕,dialog不消失;点击物理返回键dialog消失
dialog.setCanceledOnTouchOutside(false);
5 Dimiss原理
取消(onCancel)操作,最终也会走到Dialog的onDimiss()方法中,
AlertDialog dialog= new AlertDialog.Builder(mContext).create();
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
Log.i("hzk","dissmiss"); //取消时,dialog消失,此时设定了消失的监听,代码会走到这里
}
});