Android允许应用查询的设备屏幕属性之一是它的宽高比。在我看到的示例中,此属性似乎只有两个值 - long 和 notlong 。
我正在尝试对Android使用的逻辑进行逆向工程,以将设备分类为具有两种宽高比之一。
为了获得一些官方数据,我提到了Android Studio中AVD Manager工具中包含的设备定义所提供的值,并将其与我自己的计算结合起来:
专栏"已公布的比率"显示从AVD Manager中提取的值。根据这些结果,我无法理解Nexus 5和6如何被认为是 notlong ,而Galaxy S4和Galaxy Nexus被认为是 long
答案 0 :(得分:9)
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels
);
答案 1 :(得分:1)
答案 2 :(得分:1)
这是一个古老的问题,但是没有一个建议的答案能使我获得正确的比率。经过尝试之后,我能够获得正确的宽高比(例如,像素3a为18.5 / 9 = 2.0555):
科特琳:
val aspectRatio = window.decorView.height.toFloat() / window.decorView.width.toFloat()
Java:
float aspectRatio = ((float) getWindow().getDecorView().getHeight()) /
((float) getWindow().getDecorView().getWidth())
答案 3 :(得分:0)
我觉得我对这个问题的答案非常晚,但对于那些想知道的人来说,答案仍然是:
if(screen_width > screen_height)
{
aspectRatio = screen_width / screen_height;
}
else
{
aspectRatio = screen_height / screen_width;
}
答案 4 :(得分:0)
...属性似乎只有两个值- long 和 notlong 。 我正在尝试对Android用来对设备进行分类的具有两种长宽比之一的逻辑进行逆向工程。
为记录起见,无需进行反向工程,请参阅https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/res/Configuration.java
// Is this a long screen?
if (((longSizeDp*3)/5) >= (shortSizeDp-1)) {
// Anything wider than WVGA (5:3) is considering to be long.
screenLayoutLong = true;
} else {
screenLayoutLong = false;
}
因此,基本上,Android在DP中采用屏幕尺寸,结果是:
示例-Nexus 4-384 x 640 dp(5:3):
dp中的长边:640
dp中的短边:384
数学:
640 * 3/5 = 384
384> =(384-1)->假->没空