在我的Android App中,我使用不同的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
文件夹等等。
提前致谢。
答案 0 :(得分:4)
设备碎片一直是Android的一个大问题。可悲的是,同样让Android如此强大的东西也是痛苦的巨大根源。您无法真实地预测设备制造商将如何改变设备的不同方面,包括屏幕和宽高比。
但是你可以自己检查一下这个比例并根据它做出改变(但我想这不是你想到的“官方”方式):
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);