Android 自定义Dialog位置设置

最近接了个需求,就是在某个时刻,给App弹一个自定义的弹窗。就是一张图加一段文字描述。感觉很简单,就直接接了下来。然后各种复制粘贴过后,这个弹窗也就大概做了出来,感觉再把从居中挪到右上角就可以了,然而就这一挪废了我将近一天的时间。感觉道路有些曲折,遂记录一下,以资来者。

首先创建一个自定义弹窗类,可以继承AlertDialog,也可以选择内部持有,为了好封装,我就选择内部持有来处理,内设一个show的方法来展示弹窗。

核心代码
AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity, R.style.Theme_AppCompat_Dialog);
View view = View.inflate(activity, R.layout.layout_dialog, null);

mDialog = alertDialog.setView(view).create();
		
// 设置弹窗不可以由back键控制
mDialog.setCancelable(false);

// 设置弹窗周围有灰色遮罩层,且点击遮罩层后能够触发onCancelListener监听
mDialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
mDialog.setCanceledOnTouchOutside(true);

// 设置弹窗位置为右上
WindowManager.LayoutParams params = mDialog.getWindow().getAttributes();
params.gravity = Gravity.RIGHT | Gravity.TOP;
mDialog.getWindow().setAttributes(params);
这个自定义弹窗需要注意这下面几个问题
  1. 为了更好的展示,最好将弹窗设置不可以由back键关闭,即setCancelable(false)
  2. 为了让遮罩层能够点击成功,需要配置背景色为透明,且外部点击使能,即setBackgroundDrawableResource(R.color.transparent),setCanceledOnTouchOutside(true)
  3. 设置弹窗位置,可以在layout中进行相应的距离数值数值,然后在代码中按照需求设置好上下左右,即setAttributes(params)。这块尝试过使用x、y进行设置,但是未生效;
  4. 为了修改弹窗位置,也可以使用复写Dialog主题来解决,即声明一个新的style来创建dialog,但是不知道为啥我只能实现到靠一侧,无法实现靠一个角。
    <style name="new_dilaog" parent="ThemeOverlay.AppCompat.Dialog.Alert">
        <item name="android:windowBackground">@null</item>
    </style>

参看代码:CustomDialog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kiba_zwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值