缩放android应用程序以获得相同比例的不同显示



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

经过数小时的研究,当我得到将为Nexus7(7英寸)构建的应用程序扩展到具有14'显示屏的设备的任务时,我找到了最好的方法。在应用程序初始化时,我覆盖标准配置并显示度量。查看代码示例:

            //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_xlage-在不同的资源目录(res/value、res/value-xlarge mdpi等)中是可变的,用于简单地识别当前显示度量。

最新更新