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

所属分类: 软件编程 / Android 阅读数: 34
收藏 0 赞 0 分享

前言

本文主要给大家介绍了关于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 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("WangJ", "方法3:" + statusBar); 

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

手机应用区域=标题栏+View绘制区域(setcontent()中设置的布局)

获取手机以应用区域

//应用区域
  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异常 java.lang.IllegalStateException解决方法

这篇文章主要介绍了Android异常 java.lang.IllegalStateException解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Split()字符串分割特殊用法案例详解

本文通过案例的形式给大家详细介绍了android中split()字符串分割特殊用法的知识,非常不错具有参考借鉴价值,感兴趣的朋友参考下
收藏 0 赞 0 分享

Android仿新浪微博启动界面或登陆界面(1)

这篇文章主要为大家详细介绍了Android仿新浪微博启动界面或登陆界面的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿新浪微博oauth2.0授权界面实现代码(2)

这篇文章主要为大家详细介绍了Android仿新浪微博oauth2.0授权界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发中使用sqlite实现新闻收藏和取消收藏的功能

本篇文章主要介绍了sqlite实现新闻收藏和取消收藏功能,主要涉及到oracle数据库方面的内容,对于Android开发sqlite实现收藏和取消功能感兴趣的朋友可以参考下本文
收藏 0 赞 0 分享

Android仿新浪微博分页管理界面(3)

这篇文章主要为大家详细介绍了Android仿新浪微博分页管理界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android UI自定义ListView实现下拉刷新和加载更多效果

这篇文章主要介绍了Android UI自定义ListView实现下拉刷新和加载更多效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android—基于微信开放平台v3SDK开发(微信支付填坑)

这篇文章主要介绍了Android—基于微信开放平台v3SDK开发(微信支付填坑),具有一定的参考价值,有需要的可以了解一下。
收藏 0 赞 0 分享

Android仿新浪微博自定义ListView下拉刷新(4)

这篇文章主要为大家详细介绍了Android仿新浪微博自定义ListView下拉刷新,重点介绍了Adapter的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android控件之使用ListView实现时间轴效果

这篇文章主要介绍了Android基础控件之使用ListView实现时间轴效果的相关资料,本文是以查看物流信息为例,给大家介绍了listview时间轴的实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多