Android中获取状态栏高度的两种方法分享

 更新时间:2017年02月10日 14:27:19   投稿:daisy  
在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度。为以后方便,在此做个简单记录。下面这篇文章主要介绍了Android中获取状态栏高度的两种方法,两种方法分别给出了示例代码,有需要的朋友可以参考借鉴。

前言

最近在做一个关于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取值为:

  1. ldpi (dpi=120,density=0.75)
  2. mdpi (dpi=160,density=1)
  3. hdpi (dpi=240,density=1.5)
  4. xhdpi (dpi=320,density=2)
  5. 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开发者们能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • Android环形进度条(安卓默认形式)实例代码

    Android环形进度条(安卓默认形式)实例代码

    这篇文章主要介绍了Android环形进度条(安卓默认形式)实例代码的相关资料,需要的朋友可以参考下
    2016-03-03
  • Android 自定义输入支付密码的软键盘实例代码

    Android 自定义输入支付密码的软键盘实例代码

    这篇文章主要介绍了Android 自定义输入支付密码的软键盘实例代码的相关资料,并附简单实例代码和实现效果图,需要的朋友可以参考下
    2016-11-11
  • Android 使用ViewPager实现轮播图效果

    Android 使用ViewPager实现轮播图效果

    这篇文章主要介绍了Android 使用ViewPager实现轮播图效果,通过实例代码给大家讲解了适配器和各个方法的作用介绍,需要的朋友可以参考下
    2017-05-05
  • 基于Flutter实现扫描二维码功能

    基于Flutter实现扫描二维码功能

    在今天的移动开发中,二维码扫描已经成为了常见的功能之一,Flutter作为一款跨平台的开发框架,提供了丰富的插件和功能,下面我们就来看看如何使用Flutter实现扫描二维码功能吧
    2024-11-11
  • Android Application存取公共数据的实例详解

    Android Application存取公共数据的实例详解

    这篇文章主要介绍了Android Application存取公共数据的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • android实现多线程下载文件(支持暂停、取消、断点续传)

    android实现多线程下载文件(支持暂停、取消、断点续传)

    本篇文章主要介绍了androids实现多线程下载文件,主要包括暂停、取消、断点续传等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • Android Jetpack组件DataBinding详解

    Android Jetpack组件DataBinding详解

    这篇文章主要介绍了Android Jetpack组件DataBinding,DataBinding有很多优势,其中最明显是代码更加简洁,可读性会更高。部分和UI控件有关的代码可以在布局文件当中完成,本文给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • Android Studio升级到3.0后遇到的坑

    Android Studio升级到3.0后遇到的坑

    自从谷歌发布Android Studio 3.0版本后,一直心向往之,终于抽时间做了下升级处理,现在把升级过程中遇到的一些问题以及解决方案分享给大家,希望对大家能给有事帮助
    2017-11-11
  • Android WebView的使用方法及与JS 相互调用

    Android WebView的使用方法及与JS 相互调用

    这篇文章主要介绍了Android WebView的使用方法及与JS 相互调用的相关资料,WebView 是 Android 中一个非常实用的组​件, WebView 可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用,需要的朋友可以参考下
    2017-07-07
  • Android5.0之Activity的转场动画的示例

    Android5.0之Activity的转场动画的示例

    本篇文章主要介绍了Android5.0之Activity的转场动画的示例,非常具有实用价值,需要的朋友可以参考下
    2017-10-10

最新评论