Android通过DecorView获取状态栏、标题栏、底部导航栏的高度
通过DecorView获取状态栏的高度
文章过时,现在Android窗口有多样化,旋转,折叠缩小等等,需要动态获取高度。
/**该方法不能在初始化的时候用
* 获取状态栏高度
*/
public static int getStatusBarHeight(Activity context) {
int height;
View decorView = context.getWindow().getDecorView();
Rect rect = new Rect();
// Window可视区域坐标(不包含状态栏与底部导航栏高度)
decorView.getWindowVisibleDisplayFrame(rect);
height = rect.top;
return height;
}
通过DecorView获取底部导航栏的高度
/**该方法不能在初始化的时候用
* 获取导航栏高度
*/
public static int getNavBarHeight(Activity context) {
int height;
Display display = context.getWindow().getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getRealSize(point);
View decorView = context.getWindow().getDecorView();
Configuration conf = context.getResources().getConfiguration();
if (Configuration.ORIENTATION_LANDSCAPE == conf.orientation) {
View contentView = decorView.findViewById(android.R.id.content);
height = Math.abs(point.x - contentView.getWidth());
} else {
Rect rect = new Rect();
// Window可视区域坐标(不包含状态栏与底部导航栏高度)
decorView.getWindowVisibleDisplayFrame(rect);
height = Math.abs(rect.bottom - point.y);
}
return height;
}
获取标题栏高度
/**该方法不能在初始化的时候用
* 获取标题栏高度
*/
public static int getTitleBarHeight(Activity context) {
int height;
View decorView = context.getWindow().getDecorView();
Rect rect = new Rect();
// Window可视区域坐标(不包含状态栏与底部导航栏高度)
decorView.getWindowVisibleDisplayFrame(rect);
int viewTop = context.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
height = Math.abs(rect.top-viewTop );
return height;
}
获取屏幕的宽高:
public final class ScreenUtils {
/**
* Return the width of screen, in pixel.
*
* @return the width of screen, in pixel
*/
public static int getScreenWidth(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (wm == null) return -1;
Point point = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
wm.getDefaultDisplay().getRealSize(point);
} else {
wm.getDefaultDisplay().getSize(point);
}
return point.x;
}
/**
* Return the height of screen, in pixel.
*
* @return the height of screen, in pixel
*/
public static int getScreenHeight(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (wm == null) return -1;
Point point = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
wm.getDefaultDisplay().getRealSize(point);
} else {
wm.getDefaultDisplay().getSize(point);
}
return point.y;
}
}