方法一:
Display defaultDisplay = getWindowManager().getDefaultDisplay();
Point point = new Point();
defaultDisplay.getSize(point);
final int screenWidth = point.x;
final int screenHeight = point.y;
(screenWidth 为1200,screenHeight 为2499)
方法二:
Rect outSize = new Rect();
getWindowManager().getDefaultDisplay().getRectSize(outSize);
int left = outSize.left;
int top = outSize.top;
int right = outSize.right;
int bottom = outSize.bottom;
//left = 0,top = 0,right = 1200,bottom = 2499
方法三:
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int widthPixels = outMetrics.widthPixels;
int heightPixels = outMetrics.heightPixels;
//widthPixels = 1200, heightPixels = 2499
以此可以看出方法一二三获取到的高度都是一样的,但是和屏幕高度有所差距,断点调试该三种方式获取到的为app显示的高度,手机屏幕高度应该为app高度+系统装饰高度(比如状态栏之类的)。
方法四:
Point outSize = new Point();
getWindowManager().getDefaultDisplay().getRealSize(outSize);
int x = outSize.x;
int y = outSize.y;
//x = 1200,y = 2640
方法五:
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(outMetrics);
int widthPixel = outMetrics.widthPixels;
int heightPixel = outMetrics.heightPixels;
//widthPixel = 1200,heightPixel = 2640
方法四以及方法五这两种方式获取到的为屏幕高度。
全面屏手机以及普通屏手机获取屏幕高度工具类。
public class HeightUtils {
public static int getFullActivityHeight(@Nullable Context context) {
if (!isAllScreenDevice()) {
return getScreenHeight(context);
}
return getScreenRealHeight(context);
}
private static final int PORTRAIT = 0;
private static final int LANDSCAPE = 1;
@NonNull
private volatile static Point[] mRealSizes = new Point[2];
public static int getScreenRealHeight(@Nullable Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return getScreenHeight(context);
}
int orientation = context != null
? context.getResources().getConfiguration().orientation
: IronApplication.getInstance().getResources().getConfiguration().orientation;
orientation = orientation == Configuration.ORIENTATION_PORTRAIT ? PORTRAIT : LANDSCAPE;
if (mRealSizes[orientation] == null) {
WindowManager windowManager = context != null
? (WindowManager) context.getSystemService(Context.WINDOW_SERVICE)
: (WindowManager) IronApplication.getInstance().getSystemService(Context.WINDOW_SERVICE);
if (windowManager == null) {
return getScreenHeight(context);
}
Display display = windowManager.getDefaultDisplay();
Point point = new Point();
display.getRealSize(point);
mRealSizes[orientation] = point;
}
return mRealSizes[orientation].y;
}
public static int getScreenHeight(@Nullable Context context) {
if (context != null) {
return context.getResources().getDisplayMetrics().heightPixels;
}
return 0;
}
private volatile static boolean mHasCheckAllScreen;
private volatile static boolean mIsAllScreenDevice;
public static boolean isAllScreenDevice() {
if (mHasCheckAllScreen) {
return mIsAllScreenDevice;
}
mHasCheckAllScreen = true;
mIsAllScreenDevice = false;
// 低于 API 21的,都不会是全面屏。。。
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return false;
}
WindowManager windowManager = (WindowManager) IronApplication.getInstance().getSystemService(Context.WINDOW_SERVICE);
if (windowManager != null) {
Display display = windowManager.getDefaultDisplay();
Point point = new Point();
display.getRealSize(point);
float width, height;
if (point.x < point.y) {
width = point.x;
height = point.y;
} else {
width = point.y;
height = point.x;
}
if (height / width >= 1.97f) {
mIsAllScreenDevice = true;
}
}
return mIsAllScreenDevice;
}
}
版权声明:本文为zztt113原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。