使用相同比例缩放不同显示的Android应用程序

时间:2014-10-24 14:31:59

标签: scale

如何以相同的方式和比例在不同的显示器(尺寸)上缩放我的应用程序? (我尝试了兼容模式,不同字体大小的不同风格,但它不适合我)

1 个答案:

答案 0 :(得分:0)

当我完成了为Nexus7(7英寸)构建的应用程序扩展应用程序的任务,经过多个小时的研究后,我找到了最好的方法。我的应用程序正在初始化时覆盖标准配置和displayMetrics。查看代码示例:

            //change dinsity for xlarge with mdpi displays for same proportions as Nexus7
        if (context.getResources().getBoolean(R.bool.bool_screen_xlarge)) {
//            final int densityValue = DisplayMetrics.DENSITY_LOW; //120
//            final int densityValue = DisplayMetrics.DENSITY_MEDIUM; //160
//            final int densityValue = 213; //213 Nexus 7 2012
//            final int densityValue = DisplayMetrics.DENSITY_HIGH; //240
            final int densityValue = DisplayMetrics.DENSITY_XHIGH; //320
            final float densityFactor = (float) densityValue / DisplayMetrics.DENSITY_DEFAULT; //1.5f for example

            Resources resources = context.getResources();
            DisplayMetrics displayMetrics = resources.getDisplayMetrics();
            Configuration configuration = resources.getConfiguration();
            configuration.fontScale = densityFactor;
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) configuration.densityDpi = densityValue;
            displayMetrics.xdpi = densityValue * (displayMetrics.xdpi / displayMetrics.densityDpi);
            displayMetrics.ydpi = densityValue * (displayMetrics.ydpi / displayMetrics.densityDpi);
            displayMetrics.density = densityFactor;
            displayMetrics.densityDpi = densityValue;
            displayMetrics.scaledDensity = densityFactor;
        }

您应该将此代码放到Application :: onCreate()方法中。 R.bool.bool_screen_xlarge - 在不同的资源目录(res / value,res / value-xlarge-mdpi等)中是可变的,用于简单识别当前显示度量。