获取手机宽高多种方式

方法一:

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版权协议,转载请附上原文出处链接和本声明。