您的位置:首页 > 移动开发 > Android开发

Android通过ViewTreeObserver获得输入法键盘弹起后可见区域高度

2016-06-08 16:32 567 查看
需求:项目中需要获取输入法键盘弹起后,手机屏幕可见区域高度(即手机屏幕高度-输入法高度)

解决方法:OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。

mRLAll.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@SuppressLint("NewApi")
public void onGlobalLayout() {
//移除布局变化监听
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mRLAll.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
mRLAll.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
//getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(this);
Rect r = new Rect();
mRLAll.getWindowVisibleDisplayFrame(r);
TestLog.i(TAG, "lent = " + (r.height()));
int height = r.height()+r.top;//手机屏幕可见区域高度
}
});


note:

  1.mRLAll是当前页面根view

  2.当前activity未设置全屏幕,所以可见区域高度= r.height()+r.top,r.top是状态栏高度;如果设置为全屏显示,则可见区域高度= r.height()

  3.OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener移除掉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: