最近在做开发的时候发现监听华为手机Meate
和P
系列的手机底部都会有虚拟按键,这几天在做公司视屏通话界面的时候,展现对方像的同时还需要显示对方的音频打开或者关闭状态。在华为手机上面出现了虚拟键盘打开关闭出现图片错位的问题。最终解决方案如下。
- 自定义一个根布局
View
,继承RelativeLayout
. - 虚拟键盘弹出会出现布局大小变化,即会回掉
onLayout()
实现给布局重新定位。 - 添加自定义布局到根布局
xml
当中。 - 实现布局虚拟键盘监听接口
onLayoutKeyChange
代码如下
/** * Created by xaio bailong on 2016/3/2. */ public class VitualKey extends RelativeLayout { private onLayoutKeyChange mLayoutKeyChange; public VitualKey(Context context) { super(context); } public VitualKey(Context context, AttributeSet attrs) { super(context, attrs); } public VitualKey(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * @param changed 布局发生改变 ture 没有改变False * @param l * @param t * @param r * @param b */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); //Log.e("onLayout", "onLayout: b "+b); if (changed) mLayoutKeyChange.onLayoutKeyChange(b); } public void setonLayoutKeyChange (onLayoutKeyChange layoutKeyChange) { mLayoutKeyChange = layoutKeyChange; } public interface onLayoutKeyChange { /** * 虚拟键盘状态监听 * * @param b 布局距离底部的布局 */ void onLayoutKeyChange(int b); } }