首页 > IT职业 > IT图书 > Android-获取屏幕宽高
类说明
Provides information about the size and density of a logical display. 提供合理显示的,有关大小和密度的信息。
显示区域有2种描述方式
应用程序的显示区域
不包括了状态栏(刘海屏,水滴屏等),导航栏等系统UI所占用的空间
实际显示区域
包括了状态栏(刘海屏,水滴屏等),导航栏等系统UI所占用的空间
1.任意Context
/**
* Get Display
* @param context Context for get WindowManager
* @return Display
*/
private static Display getDisplay(Context context) {
WindowManager wm = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); if (wm != null) { return wm.getDefaultDisplay();
} else { return null;
}
}
2.限Activity
通过Activity类型的Context,不仅可以通过Context的方式获取到WindowManager,还可以直接通过Activity的getWindowManager()获取到WindowManager对象,进而获取到Display对象。
通常我们需要获取屏幕的信息都是为了布局,如果是出于布局目的推荐直接这种方式获取Activity
/**
* Get Display(限Activity类型的Context)
* @param activity Activity for get WindowManager
* @return Display
*/
private static Display getDisplay(Activity activity) { //WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
WindowManager wm = activity.getWindowManager(); if (wm != null) { return wm.getDefaultDisplay();
} else { return null;
}
}
3.结合上面2种方式(推荐)
/**
* Get Display
* @param context Context for get WindowManager
* @return Display
*/
private static Display getDisplay(Context context) {
WindowManager wm; if (context instanceof Activity) {
Activity activity = (Activity) context;
wm = activity.getWindowManager();
} else {
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
} if (wm != null) { return wm.getDefaultDisplay();
} return null;
}
通过Display的getWidth()方法,该方法在Android4.1(API16)已经被弃用,用Display的
getSize(Point outSize)方法代替。
@Deprecated
private static int getScreenWidth(Context context) { return getDisplay(context).getWidth();
}
通过Display的getSize(Point outSize)方法。
private static int getScreenWidth(Context context) {
Display display = getDisplay(context); if (display == null) { return 0;
}
Point point = new Point();
display.getSize(point); return point.x;
}
通过Display的getRealSize(Point outSize)方法。
private static int getScreenRealWidth(Context context) {
Display display = getDisplay(context); if (display == null) { return 0;
}
Point outSize = new Point();
display.getRealSize(outSize); return outSize.x;
}
通过Display的getHeight()方法,该方法在Android4.1(API16)已经被弃用,用Display的
getSize(Point outSize)方法代替。
@Deprecated
private static int getScreenHeight(Context context) { return getDisplay(context).getHeight();
}
通过Display的getSize(Point outSize)方法。
private static int getScreenHeight(Context context) {
Display display = getDisplay(context); if (display == null) { return 0;
}
Point point = new Point();
display.getSize(point); return point.y;
}
通过Display的getRealSize(Point outSize)方法。
private static int getScreenRealHeight(Context context) {
Display display = getDisplay(context); if (display == null) { return 0;
}
Point outSize = new Point();
display.getRealSize(outSize); return outSize.y;
}
类说明
A structure describing general information about a display, such as its size, density, and font scaling. 描述一些显示信息,例如它的大小、密度和字体缩放。
准确来说这个方法是Display通过DisplayMetrics来获取信息,下面拿一个获取屏幕宽度举例
private static int getScreenWidth(Context context) {
DisplayMetrics outMetrics = new DisplayMetrics();
getDisplay(context).getMetrics(outMetrics); return outMetrics.widthPixels;
}
更便捷的获取
private static DisplayMetrics getMetrics(Context context) { return context.getResources().getDisplayMetrics();
}
1. 获取应用屏幕宽度
/**
* Get Screen Width
*/
public static int getScreenWidth(Context context) { return getDisplayMetrics(context).widthPixels;
}
2. 获取应用屏幕高度
/**
* Get Screen Height
*/
public static int getScreenHeight(Context context) { return getDisplayMetrics(context).heightPixels;
}
3.获取屏幕的Density和Dpi
/**
* Get Density
*/
private static float getDensity(Context context) { return getDisplayMetrics(context).density;
} /**
* Get Dpi
*/
private static int getDpi(Context context) { return getDisplayMetrics(context).densityDpi;
}
4.获取屏幕的实际高度(API14)
/**
* Get Screen Real Height
*
* @param context Context
* @return Real Height
*/
public static int getRealHeight(Context context) {
Display display = getDisplay(context); int screenHeight = 0; //版本API 19
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DisplayMetrics dm = new DisplayMetrics();
display.getRealMetrics(dm);
screenHeight = dm.heightPixels; //版本API 14
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try {
screenHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
} catch (Exception e) {
screenHeight = getScreenHeight(context);
}
} return screenHeight;
}
5.获取屏幕的实际高度(API19)
/**
* Get Screen Real Height
*
* @param context Context
* @return Real Height
*/
public static int getRealHeight(Context context) {
Display display = getDisplay(context); if (display == null) { return 0;
}
DisplayMetrics dm = new DisplayMetrics();
display.getRealMetrics(dm); return dm.heightPixels;
}
6. 获取屏幕的实际宽度(API14)
/**
* Get Screen Real Width
* @param context Context
* @return Real Width
*/
public static int getRealWidth(Context context) {
Display display = getDisplay(context); int screenWidth = 0; //版本高于API 19
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DisplayMetrics dm = new DisplayMetrics();
display.getRealMetrics(dm);
screenWidth = dm.widthPixels; //版本高于API 14 ,小于API 14
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try {
screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
} catch (Exception e) {
screenWidth = getScreenWidth(context);
}
} return screenWidth;
}
7. 获取屏幕的实际宽度(API19)
/**
* Get Screen Real Width
*
* @param context Context
* @return Real Width
*/
public static int getRealWidth(Context context) {
Display display = getDisplay(context); if (display == null) { return 0;
}
DisplayMetrics dm = new DisplayMetrics();
display.getRealMetrics(dm); return dm.widthPixels;
}
作者:自导自演的机器人
链接:https://www.jianshu.com/p/f8fd3a6e9c3d
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4556/viewspace-2821553/ ,如需转载,请注明出处,否则将追究法律责任。