在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>