前言

最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法。主要参考stackoverflow的这篇问答:http://stackoverflow.com/questions/3407256/height-of-status-bar-in-android

方法一:

private double getStatusBarHeight(Context context){

double statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);

return statusBarHeight;

}

这种方法很简单,只有一行代码,查过参考手册后可以翻译一下:

状态栏高度=取大于其的最小整数(25*上下文_获取应用包的资源实例_获取当前屏幕尺寸_屏幕密度比例)

其中density并不是真实的屏幕密度,而是一个相对密度,基准密度为160dpi,比如我测试的手机为HTC one m8,查的屏幕密度为441dpi,相对160为2.75,density就取为3。各分辨率的density取值为:

ldpi (dpi=120,density=0.75)

mdpi (dpi=160,density=1)

hdpi (dpi=240,density=1.5)

xhdpi (dpi=320,density=2)

xxhdpi (dpi=480,density=3)

所以得到的状态栏高度为25*3=75

由这种方法得到的状态栏高度具有较大局限性,比如因为某种需要去掉状态栏或本身没有状态栏,此时状态栏高度应为0,但是该方法依然能够得到一个非零的状态栏高度。

方法二:

private int getStatusBarHeight(Context context) {

int result = 0;

int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");

if (resourceId > 0) {

result = context.getResources().getDimensionPixelSize(resourceId);

}

return result;

}

这里我们用到了getIdentifier()的方法来获取资源的ID,其中第一个参数是要获取资源对象的名称,比如我们要获取状态栏的相关内容,这里填入"status_bar_height";第二个参数是我们要获取什么属性,我们要获取高度内容,所以填入"dimen";第三个是包名,状态栏是系统内容,故填入“android”。

另外一个用到的办法是getDimensionPixelSize() ,由函数名就能知道是根据资源ID获得资源像素尺寸,这里就直接获得状态栏的高度。

这种方法在状态栏不存在的时候就会获得其高度为0.

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流。

时间: 2017-02-08

Android获取的状态栏高度,Android中获取状态栏高度的两种方法分享相关推荐

  1. 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法

    将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...

  2. WPF中在XAML中实现数据类型转换的两种方法

    WPF中在XAML中实现数据类型转换的两种方法 原文:WPF中在XAML中实现数据类型转换的两种方法 熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在 ...

  3. VB中FSO的调用的两种方法

    方法一:   Dim   objFso      Set   objFso   =   CreateObject("Scripting.FileSystemObject")    ...

  4. Revit插件教学丨Revit中绘制斜楼板的两种方法?

    Revit插件教学丨Revit中绘制斜楼板的两种方法? 我们经常遇到一些斜楼板,很多朋友不知道如何画好楼板,经常在公众号留言说怎么画好楼板,怎么快速高效.但我相信很多玩Revit的玩家都很熟悉,今天和 ...

  5. Java中的string定义的两种方法和区别

    java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...

  6. 多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...

    MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发 ...

  7. python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。

    Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...

  8. 计算机word降序排列怎么做,word中怎么进行排序的两种方法

    word文档中表格除了作为我们的编辑和展示功能之外,还可以进行排序功能,十分方便,那么下面就由学习啦小编给大家分享下word中进行排序的技巧,希望能帮助到您. word中进行排序方法一: 步骤一:将光 ...

  9. Linux中增加软路由的两种方法

    Linux中增加软路由的两种方法 第一种: route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0 /* 增加 ...

  10. HTML中写CSS代码的两种方法

    在HTML中写CSS代码也两种方法. 写在HTML标签里 使用CSS前 <h1>这是一个标题 </h1> 使用CSS后 <h1 style="color:red ...

最新文章

  1. 【iOS开发】企业版证书($299)In-House方式发布指南 (转)
  2. Jeff Dean| 面向系统的机器学习和面向机器学习的系统
  3. Fedora 14安装飞信
  4. C语言分支结构的作用,C语言丨用switch语句实现多分支选择结构
  5. Ethereum 开发简介
  6. [书目20110326]高素质员工的28堂必修课
  7. cad图纸怎么看懂_教你如何快速看懂建筑施工图纸
  8. 使用React Native源码编译Android项目
  9. 网页打印服务器无法创建对象,打印问题,小编教你怎么解决automation服务器不能创建对象...
  10. xslx-style导出,表头样式表格样式,指定条件
  11. 双屏怎么快速切换鼠标_图文为您win7系统设置一键快速切换双屏显示的详细步骤...
  12. 多台显示器图像拼接组成大屏幕是怎么实现的?
  13. 【python量化】用时间卷积神经网络(TCN)进行股价预测
  14. ghost还原固态硬盘_高级格式化_固态硬盘到底能不能使用Ghost软件?终于说明白了...
  15. ACE初学者使用指南
  16. unity3d英语单词拼写小游戏Pics Quiz Maker With Categories 3.0
  17. chrome —— 登录账号
  18. Collection和List,Set,Map的关系与说明
  19. 国际快递顺丰API接口接入教程代码示例
  20. qt中使用qwt实现实时曲线显示

热门文章

  1. 上周上线碰见的ORA-00054错误回放
  2. 解决VS 于 致命错误 RC1015: 无法打开包含文件 #39;afxres.h#39; 问题
  3. Python.Scrapy.12-scrapy-source-code-analysis-part-2
  4. Hadoop日记Day7---HDFS的WED端口
  5. 【转载】机器学习领域的大家
  6. [转贴] 游戏服务器架构二
  7. 漫谈 Weblogic CVE-2020-2555
  8. python flask 设置 header 响应体、响应头、状态码
  9. linux 内核 编译详解
  10. 编写 Debugging Tools for Windows 扩展,第 2 部分:输出 (windbg 插件 扩展)