AutoLayout对于特殊分辨率的处理方式
2018-01-13 00:00
267 查看
上一段时间有同事提了一个bug,说他手机用我们APP的时候图标全部都变型了,被强制拉长,现在分享一下这台手机OPPO R11s,分辨率高达2160*1080,这奇葩分辨率,一般的分辨率只是1920*1080,所以怪不得图标会拉长,现在教大家一个完美处理这个问题的方法。废话不多说,直接上代码
这个是原来AutoLayout初始化的代码,可以看出他是根据我们设置的宽高来按比例显示,所以当出现分辨率不是16:9的时候会很恶心,所以这时候我们要做一个根据手机分辨率来调整参数的举动
首先要判断有没有虚拟按键,有的话要计算出来因为获取屏幕高度是不包括按钮的,而产商给出的屏幕的高度是虚拟按钮的高度再加系统获取的ScreenHeight。之后看代码就知道我重新计算了mDeisignHeight,750是我配置的屏幕宽度,这样就能完美解决奇葩分辨率的问题啦。
public void init(Context context) { getMetaData(context); int[] screenSize = ScreenUtils.getScreenSize(context, useDeviceSize); mScreenWidth = screenSize[0]; mScreenHeight = screenSize[1]; L.e(" screenWidth =" + mScreenWidth + " ,screenHeight = " + mScreenHeight); } private void getMetaData(Context context) { PackageManager packageManager = context.getPackageManager(); ApplicationInfo applicationInfo; try { applicationInfo = packageManager.getApplicationInfo(context .getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null && applicationInfo.metaData != null) { mDesignWidth = applicationInfo.metaData.getInt(KEY_DESIGN_WIDTH); mDesignHeight = applicationInfo.metaData.getInt(KEY_DESIGN_HEIGHT); } } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException( "you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + " in your manifest file.", e); } L.e(" designWidth =" + mDesignWidth + " , designHeight = " + mDesignHeight); }
这个是原来AutoLayout初始化的代码,可以看出他是根据我们设置的宽高来按比例显示,所以当出现分辨率不是16:9的时候会很恶心,所以这时候我们要做一个根据手机分辨率来调整参数的举动
private void getMetaData(Context context) { PackageManager packageManager = context.getPackageManager(); ApplicationInfo applicationInfo; try { applicationInfo = packageManager.getApplicationInfo(context .getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null && applicationInfo.metaData != null) { mDesignWidth = applicationInfo.metaData.getInt(KEY_DESIGN_WIDTH); mDesignHeight = applicationInfo.metaData.getInt(KEY_DESIGN_HEIGHT); /*if(PhoneUtil.getPhoneModel().equals("OPPO R11s")) mDesignHeight = 1500;*/ /** * 针对有虚拟按键的手机重新计算数值 */ if(PhoneUtil.isHaveNavigationBar(context)){ mDesignHeight = (PhoneUtil.getScreenHeight(context)+PhoneUtil.getNavigationBarHeight(context))*750/PhoneUtil.getScreenWidth(context); } } } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException( "you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + " in your manifest file.", e); } L.e(" designWidth =" + mDesignWidth + " , designHeight = " + mDesignHeight); }
首先要判断有没有虚拟按键,有的话要计算出来因为获取屏幕高度是不包括按钮的,而产商给出的屏幕的高度是虚拟按钮的高度再加系统获取的ScreenHeight。之后看代码就知道我重新计算了mDeisignHeight,750是我配置的屏幕宽度,这样就能完美解决奇葩分辨率的问题啦。
相关文章推荐
- 360极速浏览器对于z-index的特殊处理方式
- MikuMikuDance中对于Local和Global旋转方式的特殊处理
- 获取android手机分辨率及相应的处理方式
- Android AutoLayout全新的适配方式 堪称适配终结者
- Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
- jsp中显示包含html标签等特殊字符的处理方式
- AUTO-INC锁和AUTO_INCREMENT在InnoDB中处理方式
- xcode7 ios9 处理警告 This application is modifying the autolayout engine from a background thread, which can lead to engi
- 对于ajax请求,后端不能直接返回页面的处理方式
- 对于新出来的iPhone5分辨率变了该怎么处理?IOS
- Android AutoLayout全新的适配方式 堪称适配终结者
- 对于服务器返回的JSON字符串,如果 jQuery 异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理
- Android AutoLayout全新的适配方式 堪称适配终结者
- AutoLayout全新Android适配方式
- 搜索框输入特殊字符后台的简单处理方式
- [译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
- Android AutoLayout全新的适配方式 堪称适配终结者
- Android AutoLayout全新的适配方式 堪称适配终结者
- TC对于不可识别控件的处理方式
- Android AutoLayout全新的适配方式