如何以相同的方式和比例在不同的显示器(大小)上缩放应用程序?(我尝试了兼容模式,不同风格,不同字体大小,但不适合我)
经过数小时的研究,当我得到将为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等)中是可变的,用于简单地识别当前显示度量。