android dialog隐藏虚拟按键,dialog全屏且不会弹出虚拟按键

本文介绍了如何在Android中自定义dialog样式,使其背景透明并全屏显示,同时通过代码调整布局和焦点行为,确保对话框在弹出时不会出现虚拟按键且事件不穿透。开发者可以学习如何使用WindowManager设置dimAmount、窗口大小,并掌握焦点锁定与恢复的技巧。
摘要由CSDN通过智能技术生成

1、首先在res/values/styles中自定义dialog属性

@android:color/transparent

true

@null

true

false

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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值