相信大家都遇到过带虚拟按键的手机,然后通常都会有个需求,让你做一个从底部弹出的Popupwindow,这时,当虚拟按键消失的时候你的弹出窗口页面就乱掉了,如何解决呢?请听我慢慢分析。
1、解决虚拟按键遮挡Popupwindow问题
一般来说有虚拟按键时,虚拟按键默认会遮盖窗口底部的画面,如下图:
这时我们需要设置一下Popupwindow在有虚拟按键时的属性:
1、给popupwindow设置属性:
popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
2、注意popupwindow显示时的参数:
mPopWindow.showAtLocation(getActivity().getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
在华为手机和HTC都测试过,都适配了,效果图如下:
2、解决虚拟按键显示Popupwindow布局被顶上去问题
上面那些属性的设置会使得在有虚拟按键时整个Popupwindow全部被顶上去,这时就有了另外一个问题,他可能会遮盖住页面顶部的画面,如图,页面顶部是一个播放器,Popupwindow会遮盖播放器的一部分画面,这样的效果显然给用户的体验不是那么好,我希望Popupwindow在有虚拟按键时自动改变自身高度并且一直固定显示在播放器的下方。怎么做呢?
1、首先我们需要给 Popupwindow的部门添加一个空白view,布局设置为透明,并且这个View的大小是固定的
2、设置Popupwindow的宽高为撑满全屏MATCH_PARENT
3、通常情况下,如果Popupwindow的宽高没有撑满全屏我们希望点击Popupwindow的外部使其消失,现在我们把Popupwindow的宽高设置为MATCH_PARENT,所以Popupwindow就没有了点击外部消失的效果了,但你会发现我们给他设置了一个空白view,那么我们可不可以在点击空白view的时候让Popupwindow消失呢?想必这个已经很简单了,要么监听空白View的onTouch事件,要么监听整个Popupwindow的onTouch事件,
好了,如此一来是不是既能让Popupwindow适配虚拟按键自动改变大小,也能点击空白的时候使其消失了呢?代码这里就不贴了,大家按照思路自己实现一下吧。修改以后的效果如下图: