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开发者们能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • Android 取得状态栏、任务栏高度的小例子

    复制代码 代码如下: package com.aslibra.test; import android.app.Activity; import android.graphics.Rect; import android.os.Bundle; import android.util.Log; import android.view.Window; import android.widget.ImageView; public class test extends Activity {   Ima

  • Android获取手机屏幕宽高、状态栏高度以及字符串宽高信息的方法

    本文实例讲述了Android获取手机屏幕宽高.状态栏高度以及字符串宽高信息的方法.分享给大家供大家参考.具体如下: 首先定义TextView对象commentText 获取文字的宽高: TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); textPaint.setTextSize(commentText.getTextSize()); textPaint.setColor(Color.WHITE); FontMetrics fo

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

    前言 本文主要给大家介绍了关于Android获取屏幕.状态栏及标题栏高度的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 在开始之前,先来看一张图: 绿色区域:屏幕区域 蓝色区域:状态栏区域 红色区域:标题栏区域 黄色区域:view绘制区域 1.Android手机屏幕的高度 整个手机使用发亮,不使用变黑的部分,绿色区域 获取屏幕的高度方法一 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getD

  • Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

    本文实例讲述了Android编程实现获取系统内存.CPU使用率及状态栏高度的方法.分享给大家供大家参考,具体如下: DeviceInfoManage类用于获取系统的内存,CPU的信息,以及状态栏的高度 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReade

  • Android编程实现获取标题栏、状态栏的高度、屏幕大小及模拟Home键的方法

    本文实例讲述了Android编程实现获取标题栏.状态栏的高度.屏幕大小及模拟Home键的方法.分享给大家供大家参考,具体如下: 1. 获取标题栏高度: /** * 获取标题栏的高度 * * @param activity * @return */ public int getTitleHeight(Activity activity) { Rect rect = new Rect(); Window window = activity.getWindow(); window.getDecorVi

  • Android有效获取状态栏(StatusBar)高度的方法

    本文实例讲述了Android有效获取状态栏(StatusBar)高度的方法.分享给大家供大家参考,具体如下: 碰到了需要获取状态栏高度的问题. 就像android后期版本,无法直接退出一样.找了一些方法来获取状态栏高度,结果都是为0. 还好,牛人是很多的,当时,找到一段代码,能够有效的获取状态栏的高度.特此记录,备忘,以及供大家参考使用: Class<?> c = null; Object obj = null; Field field = null; int x = 0, sbar = 0;

  • Android 获取屏幕高度,标题高度,状态栏高度(实例代码)

    通过View提供的方法获取高度方式有两种: 1, 当前显示的view中直接获取当前view高宽2, 通过Activity的getWindow().findViewById(Window.ID_ANDROID_CONTENT)获取系统当前显示的 view根(是一个framelayout对象),android绘制会将要绘制的view放置在framelayout中绘制. Display对象获取屏幕高宽 : 获取display对象 Activity中getWindowManager().getDefau

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

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

  • Android中Intent传递对象的两种方法Serializable,Parcelable

    Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者的使用场景和区别: 1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable. 2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC. 3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelab

  • Android中自定义标题栏样式的两种方法

    原装的Android标题栏配色比较单调,就是黑色的一坨,现在假设你的软件需要独自添加标题栏,这样不仅美观而且可以将进度条等加进去,如何实现: 方法一.在你的那张Activity中onCreate方法中加上下面代码: requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); //软件activity的布局 getWindow().setFeatureInt(Window.FEATURE_CUS

  • Android手机获取IP地址的两种方法

    1.使用WIFI 首先设置用户权限 复制代码 代码如下: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  <

  • Android实现底部状态栏切换的两种方式

    Android开发过程中,特别是新开的项目,底部状态栏的切换使用的频率非常的高,主要的实现方式有: (1).TabLayout + Fragment     (2).FragmentTabHost + Fragment     (3).BottomNavigationView + Fragment     (4).RidioGroup + Fragment 这里我先介绍前面两种实现方式,后面两种后期再贴出实现方式. 一.使用TabLayout + Fragment + ViewPager实现 1

  • Android 获取 usb 权限的两种方法

    前言: 最近工作上遇到几个USB模块在android平台上适配使用的情况,所以要用到USB权限获取问题 ##USB权限获取有以下2种方式: 一.直接在AndroidManifest.xml文件中进行如下配置: <activity android:name=".DemoCustomAndroidUSBActivity" android:label="@string/app_name"> <intent-filter> <action an

  • Android获取文字高度的三种方法

    前言 本文是对获取文字高度整理和总结,参考资料源自 statcoverflow的一个回答.具体参看下面的参考链接 获取文字高度的三个方法 paint.getTextBounds(String text, int start, int end, Rect bounds) paint.getFontMetrics() StaticLayout 1 paint.getTextBounds(String text, int start, int end, Rect bounds) 参数解释 text :

  • 基于Android在布局中动态添加view的两种方法(总结)

    一.说明 添加视图文件的时候有两种方式:1.通过在xml文件定义layout:2.java代码编写 二.前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类.这个类最主要的功能就是实现将xml表述的layout转化为View的功能.为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutI

  • Android 拍照后返回缩略图的两种方法介绍

    目录 前言: 一.这就是第一种方法,比较简单,不用将图片保存到手机本地存储下来. 二.第二种方法 总结 前言: 如果简单地拍照片并非您应用的主要目标,那么您可能希望从相机应用中获取图片并对该图片执行一些操作. 一.这就是第一种方法,比较简单,不用将图片保存到手机本地存储下来. 下面我们看具体代码: 1.首先是布局文件activity_photothumbnail.xml <?xml version="1.0" encoding="utf-8"?> <

  • JS获取地址栏参数的两种方法(简单实用)

    js获取地址栏参数的方法有两种:第一种,采用正则表达式获取地址栏参数,第二种,是比较传统的方法,在这小编给大家强烈推荐使用第一种方法,既方便有实用,具体实现过程请看下文详述. 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window

随机推荐