AlertDialog常见问题汇总

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消失,此时设定了消失的监听,代码会走到这里
    }
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值