如何区分 16:9 显示器和 18:9 显示器?
How to differentiate a 16:9 display from a 18:9 one?
在我的 Android 应用程序中,我使用不同的 Android 资源目录来支持多种屏幕尺寸和方向。所以在 res
里面我有一个 layout
文件夹,一个 layout-land
文件夹,一个 layout-large
文件夹,一个 layout-large-land
文件夹等等。
这种方法对我来说非常有效,直到我尝试在更新的 phone 中安装我的应用程序,该 18:9
显示而不是 16:9
显示。
此 phone 从 layout
和 layout-land
文件夹中提取资源,这意味着它正在注册为 "normal" 屏幕。
此外,如果我尝试使用以下代码获取此 phone 的屏幕尺寸,
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();
}
然后它再次被注册为普通屏幕。 但是 phone 和 16:9 显示 也是如此。不用说,这会在应用程序在这两个 phone 上的外观上产生微小但明显的差异。
所以我的问题是,有没有办法区分这两种显示方式?
注意: 我知道有解决方法,比如完全避免 dp
值,只使用权重,但我想知道的是,如果有一种 "official" 或 "advised" 方法来处理这种情况。很像用于横向的 layout-land
文件夹或用于超大屏幕的 layout-xlarge
文件夹等等。
提前致谢。
设备碎片化一直是 Android 的一个大问题。可悲的是,让 Android 如此强大的同一件事也是痛苦的巨大来源。您无法真正预测设备制造商将如何更改设备的不同方面,包括屏幕和纵横比。
但是你可以自己检查比率并根据它进行更改(但我想这不是 "official" 你想要的方式):
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);
Source
在我的 Android 应用程序中,我使用不同的 Android 资源目录来支持多种屏幕尺寸和方向。所以在 res
里面我有一个 layout
文件夹,一个 layout-land
文件夹,一个 layout-large
文件夹,一个 layout-large-land
文件夹等等。
这种方法对我来说非常有效,直到我尝试在更新的 phone 中安装我的应用程序,该 18:9
显示而不是 16:9
显示。
此 phone 从 layout
和 layout-land
文件夹中提取资源,这意味着它正在注册为 "normal" 屏幕。
此外,如果我尝试使用以下代码获取此 phone 的屏幕尺寸,
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();
}
然后它再次被注册为普通屏幕。 但是 phone 和 16:9 显示 也是如此。不用说,这会在应用程序在这两个 phone 上的外观上产生微小但明显的差异。
所以我的问题是,有没有办法区分这两种显示方式?
注意: 我知道有解决方法,比如完全避免 dp
值,只使用权重,但我想知道的是,如果有一种 "official" 或 "advised" 方法来处理这种情况。很像用于横向的 layout-land
文件夹或用于超大屏幕的 layout-xlarge
文件夹等等。
提前致谢。
设备碎片化一直是 Android 的一个大问题。可悲的是,让 Android 如此强大的同一件事也是痛苦的巨大来源。您无法真正预测设备制造商将如何更改设备的不同方面,包括屏幕和纵横比。
但是你可以自己检查比率并根据它进行更改(但我想这不是 "official" 你想要的方式):
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);
Source