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

简介: MainActivity如下: package cc.teststatusbarheight;import java.lang.reflect.

MainActivity如下:

package cc.teststatusbarheight;
import java.lang.reflect.Field;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Context;
/**
 * Demo描述:
 * 利用反射获取状态栏StatusBar的高度
 * 
 * 反射基础:
 * http://blog.csdn.net/lfdfhl/article/details/10311505
 * 
 * 参考资料:
 * http://blog.csdn.net/lilu_leo/article/details/10211327
 * http://blog.csdn.net/dany1202/article/details/6571010
 * Thank you very much
 */
public class MainActivity extends Activity {
    private Button mButton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		mButton=(Button) findViewById(R.id.button);
		mButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				getStatusBarHeight(MainActivity.this);
			}
		});
	}
	
	private void getStatusBarHeight(Context context){
		int statusBarHeight=0;
		try {
			Class clazz=Class.forName("com.android.internal.R$dimen");
			Object object=clazz.newInstance();
			Field field=clazz.getField("status_bar_height");
			//反射出该对象中status_bar_height字段所对应的在R文件的id值
			//该id值由系统工具自动生成,文档描述如下:
			//The desired resource identifier, as generated by the aapt tool.
			int id = Integer.parseInt(field.get(object).toString());  
			System.out.println("id="+id);
			//依据id值获取到状态栏的高度,单位为像素
			statusBarHeight = context.getResources().getDimensionPixelSize(id); 
			System.out.println("statusBarHeight="+statusBarHeight+"pixel");
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
}


 

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" 
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dip"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="利用反射获取状态栏StatusBar的高度"
        android:layout_centerInParent="true"
        />

</RelativeLayout>


 

相关文章
|
Android开发
android Compose中沉浸式设计、导航栏、状态栏的处理
android Compose中沉浸式设计、导航栏、状态栏的处理
1768 0
android Compose中沉浸式设计、导航栏、状态栏的处理
|
10月前
|
存储 Java Android开发
Android的配置文件操作的完美封装(使用注解 反射让配置文件操作如此清晰和简单)
Android的配置文件操作的完美封装(使用注解 反射让配置文件操作如此清晰和简单)
|
12月前
|
Java Shell API
Android源码(6.0和8.1) 屏蔽状态栏下拉和屏蔽导航栏显示
Android源码(6.0和8.1) 屏蔽状态栏下拉和屏蔽导航栏显示
406 0
|
Android开发
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景
636 0
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景
|
Java 开发工具 Android开发
Android 11 的状态栏的隐藏
Android 11 的状态栏的隐藏
995 0
Android 11 的状态栏的隐藏
|
Java Android开发
Android 5.1 SystemUI-状态栏
Android 5.1 SystemUI-状态栏
393 0
|
Android开发 网络虚拟化
Android 13.0 StatusBar顶部图标加载流程
Android 13.0 StatusBar顶部图标加载流程
|
Android开发
Android 10.0 顶部状态栏系统图标显示分析
Android 10.0 顶部状态栏系统图标显示分析
|
Java Android开发
Android 10.0 StatusBar—下拉菜单快捷方式
Android 10.0 StatusBar—下拉菜单快捷方式
|
Android开发
Android 最新状态栏处理
Android 最新状态栏处理
346 0
Android 最新状态栏处理