【发布时间】:2018-03-08 12:16:19
【问题描述】:
在我的 Android 应用程序中,我使用不同的 Android 资源目录来支持多种屏幕尺寸和方向。所以在res里面我有一个layout文件夹,一个layout-land文件夹,一个layout-large文件夹,一个layout-large-land文件夹等等。
这种方法对我来说非常有效,直到我尝试将我的应用安装在具有18:9 显示屏而不是16:9 显示屏的较新手机中。
此手机从layout 和layout-land 文件夹中提取资源,这意味着它正在注册为“正常”屏幕。
此外,如果我尝试使用以下代码获取此手机的屏幕尺寸,
int screenSize = getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK;
switch(screenSize) {
case Configuration.SCREENLAYOUT_SIZE_XLARGE:
Toast.makeText(this, "Extra Large Screen", Toast.LENGTH_LONG).show();
break;
case Configuration.SCREENLAYOUT_SIZE_LARGE:
Toast.makeText(this, "Large Screen", Toast.LENGTH_LONG).show();
break;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
Toast.makeText(this, "Normal Screen", Toast.LENGTH_LONG).show();
break;
case Configuration.SCREENLAYOUT_SIZE_SMALL:
Toast.makeText(this, "Small Screen", Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(this, "Screen size is neither xlarge, large, normal or small", Toast.LENGTH_LONG).show();
}
然后它再次被注册为普通屏幕。 但 16:9 显示屏的手机也是如此。不用说,这会在这两款手机上的应用外观上造成微小但明显的差异。
所以我的问题是,有没有办法区分这两种显示器?
注意:我知道有一些解决方法,比如完全避免 dp 值并只使用权重,但我想知道是否有“官方”或“建议”的方法来处理这种情况。很像用于横向的layout-land 文件夹或用于超大屏幕的layout-xlarge 文件夹等等。
提前致谢。
【问题讨论】:
标签: android android-layout android-resources screen-orientation screen-size