获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
2015-07-21 11:04
609 查看
1.获取Android屏幕尺寸
我们可以通过getSize()方法获得屏幕的尺寸[code]Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y;
如果不是在Activity里面,则无法使用getWindowManager(),此时可以使用WINDOW_SERVICE获得一个默认的Display
[code]WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay();
getSize()方法是在API 13 之后才加入的,在API 13之前我们需要这样做
[code]Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); // 已经过时 int height = display.getHeight(); // 已经过时
为了适配所有的设备,我们应该这样写
[code] if (android.os.Build.VERSION.SDK_INT >= 13) { display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); width = size.x; height = size.y; }else { display = getWindowManager().getDefaultDisplay(); width = display.getWidth(); height = display.getHeight(); }
还有另外一种方法,这种方法也可以正确得到屏幕尺寸
[code] DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); width = metrics.widthPixels; height = metrics.heightPixels;
更简便的写法
[code] width = getResources().getDisplayMetrics().heightPixels; height = getResources().getDisplayMetrics().widthPixels;
以上获得的屏幕高度都是包括了状态栏和导航栏的高度的
2.获取控件尺寸
如果我们在onCreate()方法里直接调用getWidth()、getMeasuredWidth()获得的尺寸为0,这是由于在onCreate()中,我们的控件还没有画好,等onCreate()执行完了,我们的控件才被测量出来,我们可以注册一个监听器,用来监听测量结果[code]ViewTreeObserver vto = mButton.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //移除上一次监听,避免重复监听 mButton.getViewTreeObserver().removeGlobalOnLayoutListener(this); //在这里调用getHeight()获得控件的高度 buttonHeight = mButton.getHeight(); } });
3.获得状态栏/通知栏的高度
[code] public static int getStatusBarHeight(Context context){ 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 = context.getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return statusBarHeight; }
4.获得导航栏高度
[code] public int getNavigationBarHeight(Activity activity) { Resources resources = activity.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android"); //获取NavigationBar的高度 int height = resources.getDimensionPixelSize(resourceId); return height; }
5.去除导航栏
在onCraete()方法中的setContentView();的之前调用下面这句代码[code] requestWindowFeature(Window.FEATURE_NO_TITLE);
6.去除状态栏/通知栏
在onCraete()方法中的setContentView();的之前调用下面这句代码[code]getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,WindowManager.LayoutParams.FLAG_FULLSCREEN);
相关文章推荐
- android 应用程序唯一标示
- Android ViewPager+Fragment Tab导航栏
- Android自定义进度框
- Android通过反射打造可以存储任何对象的万能SharedPreferences
- Android自定义横向的ProgressBar
- Android基于APN获取手机号的方法
- Android Studio NDK 编译
- Android 常用的开源库
- 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap
- android开发中的5种存储数据方式
- 适用android的MVP:如何组织展示层
- Android 利用ImageView显示图片
- Android运行时异常“Binary XML file line # : Error inflating class”
- Android自己动手打造XML解析框架
- Android模拟器的ip获取以及模拟器之间socket通信
- Android 自定义View (四) 视频音量调控
- Android android-common 工具
- Android 通过反射让SQlite建表如此简单
- Android应用程序中应用图标和名字的设置
- Android_apk逆向