最近在做开发的时候发现监听华为手机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);
}
}