修改displayMetrics适配奇葩设备

最近在公司开发中遇到一款国产的特殊设备(屏幕分辨率为1024x600,density为1.5,densityDpi为240),按标准的话这个分辨率对应的densityDpi应该是160,所以我们按设计师标准出的切图和设置字体大小,在这个设备上都偏大了。

我们的APP虽然只是跑在一些定制设备上的,但也不是只为这款设备开发的,不能为了这款设备强制修改切图大小和字体大小去适配它,于是我就想从修改densityDpi方式来适配它,只是以前一直以为densityDpi由系统指定的无法修改,后来尝试一下发现APP中的displayMetrics是可以修改的。

修改很简单,通过调用Resources的updateConfiguration方法就可以了,代码如下:

//修改屏幕density
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
if(displayMetrics.widthPixels == 1024
&& displayMetrics.heightPixels == 600
&& displayMetrics.densityDpi == DisplayMetrics.DENSITY_HIGH) {
Configuration cfg = getResources().getConfiguration();
displayMetrics.densityDpi = DisplayMetrics.DENSITY_MEDIUM;
cfg.densityDpi = DisplayMetrics.DENSITY_MEDIUM;
getResources().updateConfiguration(cfg, displayMetrics);
}

通过以上代码,基本上对图片和字体都能完美适配了,但是对于代码创建的bitmap还是会有问题,bitmap创建时默认会使用系统的density, 我们需要创建的时候指定我们修改后的displayMetrics

Bitmap bitmap = Bitmap.createBitmap(displayMetrics,width,height,config);

或者在创建完成后手动调用bitmap的setDensity方法修改density

bitmap.setDensity(DisplayMetrics.DENSITY_MEDIUM);


 扫一扫下方二维码,关注我的微信公众号,第一时间获得Android开发进阶文章