类说明
Provides information about the size and density of a logical display. 提供合理显示的,有关大小和密度的信息。
显示区域有2种描述方式
应用程序的显示区域
不包括了状态栏(刘海屏,水滴屏等),导航栏等系统UI所占用的空间实际显示区域
包括了状态栏(刘海屏,水滴屏等),导航栏等系统UI所占用的空间
获取Display的方式
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中的屏幕信息
1. 获取应用屏幕宽度
通过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; }
2. 获取实际屏幕宽度(API19)
通过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; }
3. 获取应用屏幕高度
通过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; }
4. 获取实际屏幕的高度(API19)
通过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; }
DisplayMetrics(推荐)
类说明
A structure describing general information about a display, such as its size, density, and font scaling. 描述一些显示信息,例如它的大小、密度和字体缩放。
获取DisplayMetrics的方式
1. Display
准确来说这个方法是Display通过DisplayMetrics来获取信息,下面拿一个获取屏幕宽度举例
private static int getScreenWidth(Context context) { DisplayMetrics outMetrics = new DisplayMetrics(); getDisplay(context).getMetrics(outMetrics); return outMetrics.widthPixels; }
2. Resources(推荐)
更便捷的获取
private static DisplayMetrics getMetrics(Context context) { return context.getResources().getDisplayMetrics(); }
DisplayMetrics中的屏幕信息
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
共同学习,写下你的评论
评论加载中...
作者其他优质文章