问题:在华为手机分辨率1080*1920下,显示不协调(好像被拉伸、压缩)
刚开始觉得是以为不同的EMUI的问题,但不知所以然。
虽然一直在用华为p9 plus,但始终没注意到虚拟按键,后来才发现是虚拟按键导致的问题。
/** * @param context * @return 获取屏幕原始尺寸高度,包括虚拟功能键高度 */ public static int getTotalHeight(Context context) { int dpi = 0; WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); DisplayMetrics displayMetrics = new DisplayMetrics(); @SuppressWarnings("rawtypes") Class c; try { c = Class.forName("android.view.Display"); @SuppressWarnings("unchecked") Method method = c.getMethod("getRealMetrics", DisplayMetrics.class); method.invoke(display, displayMetrics); dpi = displayMetrics.heightPixels; } catch (Exception e) { e.printStackTrace(); } return dpi; }
- /**
- * @param context
- * @return 获取屏幕内容高度不包括虚拟按键
- */
- public static int getScreenHeight(Context context) {
- WindowManager wm = (WindowManager) context
- .getSystemService(Context.WINDOW_SERVICE);
- DisplayMetrics outMetrics = new DisplayMetrics();
- wm.getDefaultDisplay().getMetrics(outMetrics);
- return outMetrics.heightPixels;
- }
计算出虚拟按键的高度:int heigit = ScreentUtils.getTotalHeight(this) - ScreentUtils.getScreenHeight(this);
通过这两个方法我们可以得到手机的分辨率高度和手机去除虚拟按键的高度,两者相减就是手机的虚拟按键的高度
调用后得到的结果是总高度 : 2560 内容高度 : 2408 虚拟按键 : 152
如果想要适配该机型,其实也很简单,只需要把原来的values-2560x1440文件夹复制一份重新名为values-2408x1440即可,在使用dimens适配过程中,若遇有类似虚拟按键问题可照此处理,亲测完美适配!