Android 获取屏幕、状态栏、标题栏的高度详解

前言

如下图:
绿色区域:屏幕区域
蓝色区域:状态栏区域
红色区域:标题栏区域
黄色区域:view绘制区域

在这里插入图片描述
1.Android手机屏幕的高度(绿色区域)

方法一

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
Log.e("TAG", "屏幕高:" + dm.heightPixels);

方法二

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
Log.e("TAG","screenHeight"+displayMetrics.heightPixels);

2.Android手机状态栏的高度(蓝色区域)

方法一

int statusBarHeight1 = -1;
//获取status_bar_height资源的ID
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
	//根据资源ID获取响应的尺寸值
	statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
}
Log.e("TAG", "方法1:" + statusBarHeight1); 

方法二:通过反射

int statusBarHeight2 = -1;
try {
	Class<?> clazz = Class.forName("com.android.internal.R$dimen");
	Object object = clazz.newInstance();
    int height = Integer.parseInt(clazz.getField("status_bar_height")
       .get(object).toString());
 	statusBarHeight2 = getResources().getDimensionPixelSize(height);
} catch (Exception e) {
	e.printStackTrace();
}
Log.e("TAG", "方法2:" + statusBarHeight2); 

方法三:状态栏高度 = 屏幕高度 - 应用区高度

//屏幕
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
//应用区域
Rect outRect1 = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1);
//状态栏高度=屏幕高度-应用区域高度
int statusBar = dm.heightPixels - outRect1.height(); 
Log.e("TAG", "方法3:" + statusBar);

3.Android手机应用区域(红+黄区域)

//应用区域
Rect outRect1 = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1);
Log.e("TAG", "应用区高" + outRect1.height());

4.Android手机标题高度(红色区域)

int viewTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
Log.e("TAG", "标题栏:" + viewTop);

5.Android手机绘制区域高度(黄色区域)

Rect outRect2 = new Rect();
getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect2);
Log.e("TAG", "View绘制区域高度:" + outRect2.height());

参考文献

Android如何获取屏幕、状态栏及标题栏的高度详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值