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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,936评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,661评论 0 17
  • 屏幕适配 屏幕适配的概念 碎片化既是 Android 的优势和弱点,也是开发者们头疼的问题,同时也为 Androi...
    s酸菜阅读 9,989评论 9 58
  • 1、基础概念 屏幕尺寸 含义:指的屏幕对角线的物理长度,单位一般采用英寸(1英寸≈2.53cm) 目前市面常见的有...
    古都旧城阅读 2,764评论 0 1
  • 岁寒风冽啸苍凉, 空楼旷宇弥淡伤。 伏案索句似炼狱, 孤影寞心掠彷惶。 移步欠身凭窗望, 傲寒青松气轩昂。 忙中怎...
    凿冰而钓阅读 253评论 0 1