以编程方式获取屏幕大小?

Fel*_*lix 19 android

我想确定当前设备的代码中是否有小型,中型,大型或Xlarge屏幕.我在SDK文档中找不到任何可以帮助我获取该信息的内容.我所看到的所有方法/类只提供绝对值(即屏幕大小,以像素为单位,屏幕密度等).

有没有办法告诉我在代码中运行的是什么类型的屏幕?

Fel*_*lix 56

我最终使用bool放在不同存储桶文件夹中的资源.我只需要区分普通(小/中)和大(大/大)屏幕,所以我这样做:

值/ bools.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_large">false</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

值-大/ bools.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_large">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后,我只是打电话getBoolean(R.bool.screen_large)告诉屏幕是否大.这样,100%的平台可以决定设备的屏幕.

  • +1我不知道为什么这个答案让我笑了.:)) 好一个! (5认同)
  • +1这很酷!这是我见过的最优雅的黑客:). (4认同)
  • Sombody给这个家伙一枚奖牌.纯粹的天才黑客 (3认同)

wea*_*ire 7

密度和屏幕类型之间存在差异. 在此输入图像描述

由于您可以获得像素和密度,因此您始终可以使用静态Helper类来确定它.

您可以使用它将像素转换为dp

public static float dpFromPixels(int pixels) {
        float dp = (float) ((pixels) / Density.scale);
        return dp;
    }
Run Code Online (Sandbox Code Playgroud)

我认为您可能想要从像素中添加或减去.5f,因为从dp获取像素来自该代码.

public static int pixelsFromDp(float dps) {
        int pixels = (int) (dps * Density.scale + 0.5f);
        return pixels;
    }
Run Code Online (Sandbox Code Playgroud)

文档中

xlarge屏幕至少为960dp x 720dp

大屏幕至少640dp x 480dp

正常屏幕至少为470dp x 320dp

小屏幕至少为426dp x 320dp


Mik*_*dan 6

public static boolean isLargeScreen(Context context) {
  int screenSize = context.getResources().getConfiguration().screenLayout
    & Configuration.SCREENLAYOUT_SIZE_MASK;
  return screenSize >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
Run Code Online (Sandbox Code Playgroud)


Bil*_*hon 5

我同意Felix的回答非常优雅.但我认为我在这篇文章中发现的方式可能更容易如何使用代码确定设备屏幕大小类别(小,普通,大,xlarge)?