获取Android屏幕尺寸控件尺寸状态栏/通知栏高度导航栏高度

眼前多少难甘事,自古男儿当自强。这篇文章主要讲述获取Android屏幕尺寸控件尺寸状态栏/通知栏高度导航栏高度相关的知识,希望能为你提供帮助。
1.获取android屏幕尺寸我们能够通过getSize()方法获得屏幕的尺寸

Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y;

假设不是在Activity里面。则无法使用getWindowManager()。此时能够使用WINDOW_SERVICE获得一个默认的Display
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay();

getSize()方法是在API 13 之后才增加的。在API 13之前我们须要这样做
Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); // 已经过时 int height = display.getHeight(); // 已经过时

为了适配全部的设备。我们应该这样写
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(); }

还有第二种方法,这样的方法也能够正确得到屏幕尺寸
DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); width = metrics.widthPixels; height = metrics.heightPixels;

更简便的写法
width = getResources().getDisplayMetrics().heightPixels; height = getResources().getDisplayMetrics().widthPixels;

以上获得的屏幕高度都是包含了状态栏和导航栏的高度的
获取Android屏幕尺寸控件尺寸状态栏/通知栏高度导航栏高度

文章图片

2.获取控件尺寸假设我们在onCreate()方法里直接调用getWidth()、getMeasuredWidth()获得的尺寸为0。这是因为在onCreate()中,我们的控件还没有画好。等onCreate()运行完了,我们的控件才被測量出来,我们能够注冊一个监听器,用来监听測量结果
ViewTreeObserver vto= mButton.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Override public void onGlobalLayout() { //移除上一次监听。避免反复监听 mButton.getViewTreeObserver().removeGlobalOnLayoutListener(this); //在这里调用getHeight()获得控件的高度 buttonHeight = mButton.getHeight(); } });

3.获得状态栏/通知栏的高度
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.获得导航栏高度
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();的之前调用以下这句代码
requestWindowFeature(Window.FEATURE_NO_TITLE);

6.去除状态栏/通知栏【获取Android屏幕尺寸控件尺寸状态栏/通知栏高度导航栏高度】在onCraete()方法中的setContentView()。的之前调用以下这句代码
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,WindowManager.LayoutParams.FLAG_FULLSCREEN);



    推荐阅读