Android-取得输入法或者系统标题栏、魅族下部smartbar等的高度

时间:2021-02-16 08:55:04

如图,我用的是魅族Mx2,假设我要取得系统标题栏,或者我要根据得用户安装的输入法的高度改变想要的显示效果,又或者我要取得魅族flyme系统smartbar的高度,很多人都不知道怎么获取,今天我给大家分享下一个简单的方法取得它们的高度

Android-取得输入法或者系统标题栏、魅族下部smartbar等的高度


关于怎么取得正确取得高度(避免取得的值为0)的方法在我另一篇blog里有,这里也有

http://blog.csdn.net/hjhrq1991/article/details/38950819


好,下面我说下代码,代码很少,在oncreated方法里取得,系统会调用一个listener来监听view的绘制,在view绘制完的时候,系统会回调回来通知view绘制,然后这时我们才去取得view的高度。


                // 我的布局内容,最外层的layout
myLayout = (RelativeLayout) findViewById(R.id.rootview);

ViewTreeObserver vto = myLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {

Rect r = new Rect();
// 取得这个布局动态的显示区域
myLayout.getWindowVisibleDisplayFrame(r);

// 取得这个布局所在根布局的高度,补充些知识点,我们所有的布局都是放在一层根布局里(好像是framelayout),
// 我们平常的输入法之类的是放在这个根布局里的,所以我们的思路是取得根布局的高度,再减去动态变化的这个RelativeLayout的高度,
// 得到的就是我们输入法的布局。拓展出去,获取状态栏的高度同理
int screenHeight = myLayout.getRootView().getHeight();
int heightDifference = screenHeight - (r.bottom - r.top);
System.out.println(screenHeight + "-----------"
+ heightDifference + "-----------");

}
});