如何以数学方式计算Android屏幕宽高比

时间:2015-02-16 22:09:48

标签: android screen aspect-ratio

Android允许应用查询的设备屏幕属性之一是它的宽高比。在我看到的示例中,此属性似乎只有两个值 - long notlong

我正在尝试对Android使用的逻辑进行逆向工程,以将设备分类为具有两种宽高比之一。

为了获得一些官方数据,我提到了Android Studio中AVD Manager工具中包含的设备定义所提供的值,并将其与我自己的计算结合起来: Devices included in AVD Manager

专栏"已公布的比率"显示从AVD Manager中提取的值。根据这些结果,我无法理解Nexus 5和6如何被认为是 notlong ,而Galaxy S4和Galaxy Nexus被认为是 long

5 个答案:

答案 0 :(得分:9)

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels
);

答案 1 :(得分:1)

要找到(16:9)中的比例,你需要找到GCD,然后将两个数字除以。

from ..converter import converter

在此呼叫比率(1920,1080)之后;

答案 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中采用屏幕尺寸,结果是:

  • 长宽比> 1.667(5:3)的屏幕-即> WVGA
  • 不长-屏幕宽高比<= 1.667(5:3)-即<= WVGA

示例-Nexus 4-384 x 640 dp(5:3):
dp中的长边:640
dp中的短边:384

数学:
640 * 3/5 = 384
384> =(384-1)->假->没空