Android APP修改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);

博客原文:http://appkfz.com/2017/07/29/android-app-change-displaymetrics/

推荐阅读更多精彩内容