Android状态栏(二):获得StatusBar的高度

Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取 简单说明一下(上图Activity采用默认Style,状态栏和标题栏都会显示):最大的草绿色区域是屏幕界面,红色次大区域我们称之为“应用界面区域”,最小紫色的区域我们称之为“View绘制区域”;屏幕顶端、应用界面区之外的那部分显示手机电池网络运营商信息的为“状态栏”,应用区域顶端、View绘制区外部显示Activity名称的部分我们称为“标题栏”。二、状态高度的测量。 阅读详情
 


获得StatusBar的高度:

方法一:

Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;

但是此段代码不能直接放在onCreate方法或普通的线程中(否则得到的高度为0),可以放在View的post方法中,如下:

new View(this).post(new Runnable()
{
					
	@Override
	public void run()
		{
			// TODO Auto-generated method stub
			Rect rect = new Rect();
			getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
			int statusBarHeight = rect.top;
			System.out.println("statusBarHeight:" + statusBarHeight);
		}
});

或者放在Activity的onWindowFocusChanged方法中

@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		// TODO Auto-generated method stub
		super.onWindowFocusChanged(hasFocus);
		Rect rect = new Rect();
		getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
		int statusBarHeight = rect.top;
		System.out.println("statusBarHeight:" + statusBarHeight);
		
	}

 


方法二:

用反射

	Class<?> c = null;
        Object obj = null;
        Field field = null;
        int x = 0,statusBarHeight = 0;
        try{
                c = Class.forName("com.android.internal.R$dimen");
                obj = c.newInstance();
                field = c.getField("status_bar_height");
                x = Integer.parseInt(field.get(obj).toString());
                statusBarHeight = getResources().getDimensionPixelSize(x);
        }catch(Exception e){
                e.printStackTrace();
        }

 


另外要注意的是,如果计算时状态栏已经被隐藏了,则得到的高度为负数,所以只有在状态栏被隐藏前才能计算其高度。


 

SystemUI StatusBar状态栏部分功能记录 目录 核心类: 部分界面布局文件 滑动和点击事件: 通知的通知显示过程 核心类: StatusBar.java 状态栏整体控制 StatusBarWindowView.java 状态栏未扩展时的跟布局 PhoneStatusBarView.java 继承PanelBar.java NotificationPanelView.java 状态栏下拉后的控制类,继承自Panel.................. 阅读详情

相关推荐

Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的Android框架体系架构知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的Android框架体系架构知识脑图原件(包括上方的面试解析xmind文档)

2401_84122760的博客 1141

安卓获取状态栏(Status Bar)高度

直接使用24dp;getDimensionPixelSize;利用反射;使用 WindowInsets。 方法一 在android6.0系统源码中,可以查到status_bar_height只有一个定值24dp, 因为可以直接使用24dp 源码参见文件./frameworks/base/core/res/res/values/dimens.xml 方法二 获取系统中”status_bar_height”的值,方法如下 private int g...

分享Android应用和系统开发、音视频编码、性能优化相关知识 1万+

Android开发:两种方法获取状态栏高度

本文介绍了两种获取Android状态栏高度的方法:一种是使用系统资源文件,另一种是使用反射。根据不同的需求,你可以选择适合自己的方法来获取状态栏的高度。Android系统提供了一个名为"dimen"的资源文件,其中定义了各种尺寸值,包括状态栏的高度。本文将介绍两种获取状态栏高度的方法,并附上相应的源代码。以上代码通过反射的方式获取到系统资源文件中的"status_bar_height"字段的值,并将其转换为像素值返回。如果你不想使用系统资源文件,还可以通过反射的方式来获取状态栏的高度。

. 2288

android status_bar_height动态调整,Android沉浸状态栏(StatusBar)兼容方案

所谓"沉浸状态栏"的实现需要两点:设置状态栏为透明或者半透明状态;整体布局可以置于状态栏下方.1. 状态栏的配置对于状态栏的配置有两种方式:在manifest中配置Activity的theme属性在theme文件中添加android:windowTranslucentStatus属性(当然仅支持api19, 即Android4.4及以上, 且根据这个属性名称可知只是半透明);...true效果:键...

weixin_39849239的博客 1082

ICESat-2数据下载的两种方法

ICESat-2数据下载

weixin_46341898的博客 2902

告别‘小目标’丢失!手把手复现DNANet红外检测网络(PyTorch版)

本文详细介绍了如何使用PyTorch从零实现DNANet红外小目标检测网络,重点解析了DNIM模块和CSAM注意力机制的设计与实现。通过实战教程,帮助开发者解决红外小目标检测中的特征提取和训练调参难题,适用于军事侦察、安防监控等场景。

weixin_28701593的博客 253

Android获取顶部状态栏statusBar高度、底部导航栏navigationBar高度

手机顶部显示时间、电量等信息的叫状态栏,即statusBar 有些手机比如华为在底部会有返回、回到主页面等虚拟功能键,这是导航栏,即navigationBar 下面列出一些项目中常用的功能代码

baidu_32472003的博客 1580

PCIe 物理层(Physical Layer)详解

PCIe物理层关键技术解析 PCIe物理层作为协议栈底层核心,承担着比特流传输、链路训练与电气特性管理等关键功能。该层采用分层架构,包含逻辑物理层(负责编解码/加扰)和电气物理层(处理信号收发)。关键技术亮点包括: 智能链路管理:通过LTSSM状态机实现11种状态转换,涵盖链路检测(Detect)、协商(Polling/Configuration)、功耗管理(L0s/L1)等全生命周期控制 高效编码方案:Gen1/Gen2采用8b/10b编码(20%开销),Gen3+升级为128b/130b(仅1.5%开销

珂珂可爱多 729

Android获取StatusBar高度的原理

获取StatusBar工具类 常见的获取状态栏高度的工具类如下: public static int getStatusBarHeightCompat(Context context) { int result = 0; int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "a...

tinyVampire的博客 2403

价值微笑曲线与AI公司的位置

1. 背景介绍 1.1 问题由来 自20世纪60年代,哈佛大学商学院教授西奥多·波特提出了“价值链”理论以来,企业如何构建竞争优势成为企业经营管理领域的研究重点。随着全球化的发展和科技进步,企业竞争环境发生了深刻变化,传统价值链管理模式逐渐显现出局限性。近年来,全球竞争格局由成本竞争转向创新竞争,企业的生存

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 1096

复现论文《Analysis of circulating current mechanism of Grid-forming offshore wind farm based on DRU-HVDC》

该论文研究了基于二极管整流单元(DRU)和低频交流(LFAC)输电的构网型(GFM)海上风电场并网系统中环流的产生机理。由于 DRU 不可控,系统电压与频率依赖于风力发电机(WT)的网侧变流器,当多台 WT 并联运行时,因输出电压幅值、相位、输出阻抗或频率不匹配,会产生基频环流,导致系统损耗增加与稳定性下降。论文通过理论建模与 MATLAB/Simulink 仿真,分析了四种不平衡工况下的环流机理,并指出幅值不平衡和阻抗不平衡引起无功环流,相位不平衡引起有功环流,频率不平衡则引起环流振荡,为后续环流抑制研究

huanghm88的专栏 106

Android中获取状态栏高度的方法

上述中呈现的是状态栏和标题栏两个界面元素, 我们通过会对状态设置一些属性,例如,沉浸式状态栏, 那么我们如何获取到状态栏的高度呢?* com.android.internal,R$dimen系统类中定义了状态栏的高属性 system_bar_height。我们可以通过反射来循环遍历系统的属性从而找到准确的状态栏属性来获取状态栏高度。// 先获取 资源id, 根据id 获取资源。// 获取Android的状态栏的资源id。需要注意的是,我们这种方式获取的高度是px值。* 1. 获取类的对象。

small_bird_top的博客 1371

Openlayers 教程 02 - 地图添加 WKT WKB GeoJson 格式的点线面数据

WebGIS 开发中,对于数据量不是很大的场景,可以直接从数据库读取数据,通过创建点线面要素(Feature),然后添加到矢量图层(vectorLayer)中,在地图上展示。添加点线面的方法可以封装一下,方便使用。...

非科班Java出身GISer的博客 3860

Android开发之有效获取状态栏(StatusBar)高度

获取状态栏高度 一、传统方式:有时获取为0,解决方法看  二    代码 Rect frame = new Rect();   getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);   int statusBarHeight = frame.top;     二、4.0.3之后可能获取为0  publi

jyqqhw_41的专栏 761

硬件工程师笔记——电子器件汇总大全

本文系统总结了14种常用电子器件的工作原理及功能应用,包括电阻、压敏电阻、电容、电感、二极管、三极管、MOS管、晶振、光耦、IGBT、继电器、磁珠、可控硅和线性稳压器。每种器件从结构原理、工作特性到典型应用进行全面解析,如电阻的限流分压、电容的储能滤波、三极管的放大开关等。重点阐述了各器件在电路设计中的关键作用,如IGBT的功率控制、继电器的隔离保护、LDO的电压稳定等,并提供了实际电路应用案例。文章还整理了硬件工程师笔试面试相关的知识点和真题资源,为电子工程师提供全面的技术参考。

XU157303764的博客 2万+

GB28181 —— 1、Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台

5462

Android系统 SystemUI 状态栏(StatusBar)和导航栏(Navigationbar) 宽度 、高度修改

Android系统 SystemUI 状态栏(StatusBar)和导航栏(Navigationbar)高度修改 frameworks/base/core/res/res/values/dimens.xml <dimen name="toast_y_offset">24dp</dimen> <!-- Height of the status bar --> <dimen name="status_bar_height">@dimen/.

Jon.Lo 的专栏 6314

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

安卓获取状态栏,底部导航栏高度

状态栏即statusBar,导航栏即某些手机底部有返回键的虚拟键那一栏,叫navigationBar。 1. 获取顶部statusBar高度 private int getStatusBarHeight() { Resources resources = mActivity.getResources(); int resourceId = resources.getIdenti...

baidu_32472003的博客 1722

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android获得statusBar高度

在画UI过程中,有些情况下需要知道statusBar高度:网上有些方法是这样的:Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; Log.v("@@@@@@", "the statusbar H

傲慢的上校的专栏 4514

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android利用反射获取状态栏(StatusBar)高度

下面是我昨晚给大家带来的: Android利用反射获取状态栏高度的代码 大家仔细的看一下 希望对你们能有帮助~ MainActivity如下: java代码 package cc.teststatusbarheight;   import java.lang.reflect.Field;   import android.os.Bundle;   import a

jyqqhw_41的专栏 949

android api26获得状态栏高度,获取statusBar(状态栏)高度的几个方法

Rect frame = new Rect();getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;首先是这个api,但是这个方法有个局限性,在onCreate()以及到onResume()的生命周期里面执行的话,获取的高度为0,因为这个decorView的绘制...

weixin_42297347的博客 542

React-Native状态栏组件(StatusBar)的使用详解

StatusBar 是手机顶部的状态条。StatusBar 是 React Native 0.20 起新增的跨平台组件,它可以用来设置并动态改变设备的状态栏显示特性。React-Native项目可以同时加载多个 StatusBar 组件,这些 StatusBar 组件的属性可以按照加载的顺序进行合并。一种常见的用法就是:我们可以在使用 Navigator 的时候,针对不同的路由页面设置特殊的状态栏样式。

suwu150 1万+

MusicFree终极适配:StatusBar组件攻克全机型状态栏难题

MusicFree是一款插件化、定制化、无广告的免费音乐播放器,致力于为用户提供极致的音乐体验。在移动应用开发中,状态栏适配一直是令开发者头疼的问题,不同机型、系统版本和主题模式下的状态栏表现差异常常导致界面不协调。本文将深入解析MusicFree如何通过自定义StatusBar组件,完美解决全机型状态栏适配难题,让音乐播放界面更加统一美观。 ## 状态栏适配的痛点与挑战 状态栏作为手机界面的

gitblog_00603的博客 750

Android状态栏详解(全网最详)

啊

一只特立独行的猪 2万+
上一篇: Android状态栏(一):StatusBar的浮动显示与隐藏
下一篇: 怎样使用开源项目中SlidingMenu自带的例子
codingbuddy
博客等级 码龄14年 4粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值