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