Android Dialog拦截物理返回键

1,144 阅读1分钟

在Android中有时候需要拦截物理返回键,最简单的方法就是在Activity中重写onBackPressed然后注释super.onBackPressed()

但是有时候一些特殊需求不能在Activiy做处理,比如广告SDK,在弹出广告倒计时结束之前不希望用户关闭页面,此时就需要借用dialog来拦截返回键

先自定义一个Dialog

public class CoverDialog extends Dialog {

    public CoverDialog(@NonNull Context context) {
        super(context, R.style.custom_dialog);
        setCancelable(false);
        Window window = getWindow();
        // 点击穿透
        window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    }

}

styles样式

    <style name="adcdn_AngAlertDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowBackground">@color/adcdn_transparent</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

注: style里不需要添加,加了这两个属性会导致拦截物理返回后无法点击dialog下面的东西

<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>