源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-06-16 07:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android中获取状态栏高度的两种方法分享
[b]前言[/b] 最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法。主要参考stackoverflow的这篇问答:http://stackoverflow.com/questions/3407256/height-of-status-bar-in-android [b]方法一:[/b]
private double getStatusBarHeight(Context context){
  double statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);
  return statusBarHeight;
 }
这种方法很简单,只有一行代码,查过参考手册后可以翻译一下: [b]状态栏高度=取大于其的最小整数(25*上下文_获取应用包的资源实例_获取当前屏幕尺寸_屏幕密度比例)[/b] 其中density并不是真实的屏幕密度,而是一个相对密度,基准密度为160dpi,比如我测试的手机为HTC one m8,查的屏幕密度为441dpi,相对160为2.75,density就取为3。各分辨率的density取值为: [list=1] [*]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) [/*] [/list] 所以得到的状态栏高度为25*3=75 由这种方法得到的状态栏高度具有较大局限性,比如因为某种需要去掉状态栏或本身没有状态栏,此时状态栏高度应为0,但是该方法依然能够得到一个非零的状态栏高度。 [b]方法二:[/b]
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;
 }
这里我们用到了[code]getIdentifier()[/code]的方法来获取资源的ID,其中第一个参数是要获取资源对象的名称,比如我们要获取状态栏的相关内容,这里填入"status_bar_height";第二个参数是我们要获取什么属性,我们要获取高度内容,所以填入"dimen";第三个是包名,状态栏是系统内容,故填入“android”。 另外一个用到的办法是[code]getDimensionPixelSize()[/code] ,由函数名就能知道是根据资源ID获得资源像素尺寸,这里就直接获得状态栏的高度。 这种方法在状态栏不存在的时候就会获得其高度为0. [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部