在我的应用程序中,我不想让它在创建设计问题时调整大小。
我已尝试在应用程序标记和启动器活动标记中使用android:resizeableActivity="false"
,但它没有帮助。
我找到了解决方案。
如果系统文本大小已更改或“显示大小”设置为“大”(Android Oreo以上),则您的应用将按正常行为(无大文本和缩放视图),代码如下:
Configuration configuration = getResources().getConfiguration();
configuration.fontScale = (float) 1; //0.85 small size, 1 normal size, 1,15 big etc
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
configuration.densityDpi = (int) getResources().getDisplayMetrics().xdpi;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
如果用户在手机上更改关于UI大小的辅助功能选项,我会假设您正在尝试显示不会改变的显示。
您可以使用DisplayMetrics来实现此功能。
DisplayMetrics metrics = getResources().getDisplayMetrics();
对于“正常”比例因子值,metrics.xdpi
和metrics.densityDpi
具有相同的值。如果不是这种情况,您可以获得“真实”比例因子,即当用户使用以下使用正常比例时使用的比例因子。
if(metrics.xdpi != metrics.densityDpi){
Log.d(TAG,"Real scale " + (metrics.xdpi / metrics.densityDpi)*metrics.density);
}
您可以使用所述值将布局中的固定值相乘,以便在不同的屏幕上具有精确的密度。这也意味着布局中的每个值都必须使用px
而不是dp
或sp
。
虽然这种方法可行,但我强烈建议不要使用它。
首先,因为它是很多工作,并且很难用未来的更新来维护该代码。
其次,Android的这个功能非常方便,如果你的应用程序没有用它编译,它可能会指出你应该更好地构建你的布局。