Android 获取状态栏标题栏导航栏等的高度
Posted 红日666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 获取状态栏标题栏导航栏等的高度相关的知识,希望对你有一定的参考价值。
开发中有时需要获取到手机状态栏、标题栏的高度。
状态栏:显示手机状态(信号、电量等)信息的那个栏
标题栏:显示应用标题的那个栏
导航栏:部分手机底部的虚拟导航栏
如下图:
手机Moto Z(2560*1440)获取的信息:
代码如下:
@Override
public void onWindowFocusChanged(boolean hasFocus)
super.onWindowFocusChanged(hasFocus);
/**
* 获取屏幕的宽/高(屏幕展示高度):
注:
如果手机没有底部虚拟导航栏则:此高度==屏幕完整高度
如果手机有底部虚拟导航栏则:此高度==屏幕完整高度-导航栏高度
方法一
*/
DisplayMetrics dm = new DisplayMetrics();
mActivity.getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenW = dm.widthPixels;
int screenH = dm.heightPixels;
/**
*方法二
*/
WindowManager windowManager =
(WindowManager)mActivity.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
/**
*方法三
*/
int width2 = mActivity.getResources().getDisplayMetrics().widthPixels;
int height2 = mActivity.getResources().getDisplayMetrics().heightPixels;
/**
*方法四
*/
int width3 = appContext.getResources().getDisplayMetrics().widthPixels;
int height3 = appContext.getResources().getDisplayMetrics().heightPixels;
/**
*方法五
*/
WindowManager windowManager =
(WindowManager)appContext.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
//以上五种方法中:
//方法一二三是通过Activity获取当前APP的宽高。
//方法四五是通过ApplicationContext来获取屏幕的宽高。
//两者区别:
//当处于分屏模式时,前者只是当前分屏APP的宽高。
//后者是这个设备屏幕宽高。
//注:
//某些情况下(具体原因待研究)带有底部虚拟导航栏的设备--在使用方法三四五获取屏幕展示高度时
//不包含状态栏,此时可以可以换用方法一二来获取。
/**
* 获取屏幕完整高度(屏幕展示高度+导航栏)[针对具有导航栏的手机]
方法一
*/
int realScreenH = 0;
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1)
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
realScreenH = dm.heightPixels;
/**
* 方法二:通过反射获取
*/
Display display = mActivity.getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
int realScreenH = 0;
Class c = Class.forName("android.view.Display");
Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
method.invoke(display, dm);
realScreenH = dm.heightPixels;
/**
* 状态栏高度
*/
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
/**
* 标题栏高度
*/
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
int contentTop = v.getTop();
int titleBarHeight = contentTop - statusBarHeight;
/**
* 获取虚拟导航栏高度
*/
int navigationBarH = realScreenH - screenH;
Logger.d("screenW:" + screenW + "\\n" + "screenH:" + screenH + "\\n" + "realScreenH:" + realScreenH
+ "\\n" + "statusBarHeight:" + statusBarHeight + "\\n"
+ "titleBarHeight:" + titleBarHeight + "\\n" + "navigationBarH:" + navigationBarH);
以上是关于Android 获取状态栏标题栏导航栏等的高度的主要内容,如果未能解决你的问题,请参考以下文章