1、首先在res/values/styles中自定义dialog属性
<style name="MyDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
2、在dialog的构造函数中super(context,R.style.mydialog)
3在oncreate中动态设置dialog的布局为全屏并且增加背景黑度
if (this.getWindow() != null) {
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.dimAmount = 0.7f;
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
this.getWindow().setAttributes(lp);
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
4复写dialog的show()方法,主要作用是焦点失能和焦点恢复,保证在弹出dialog时不会弹出虚拟按键且事件不会穿透。
public void show() {
if (this.getWindow() != null) {
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
super.show();
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
}
dialog全屏且不会弹出虚拟按键
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- import android.annotation.TargetApi; import android.app.A...
- 对于项目中经常用到的组件,进行了封装,方便他人及自己的调用和管理,减少代码的冗余,提高开发的效率我们项目中,减少重...
- 需求 Linux环境下有些是自带的Python2版本有时是刚安装号的Python其他版本,当新版本出来的时候,在开...