【问题标题】:How to check Tablet Size Programatically in Android如何在 Android 中以编程方式检查平板电脑大小
【发布时间】:2012-12-15 09:29:22
【问题描述】:

现在,我这样做:

    if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE) {
        actionBar.removeAllTabs();

    } else {  // other stuff to do 

    }

但是,我希望仅当它是 10 英寸以上平板电脑或 XLarge 时才能证明这一点。不是 7 英寸(例如 Nexus 7)。我希望 7 英寸的布局与手机相同。我可以务实地做这个检查吗?

【问题讨论】:

    标签: android layout


    【解决方案1】:

    您应该避免在代码中执行此操作,而是为为 sw720dp 定义的布局创建一个资源限定文件夹(即,您应该在 res/layout-sw720dp 下创建 10" 布局)。避免使用 large 和 @ 987654326@ 限定符,并依赖于可用的与密度无关的像素数。

    有关更多信息,请参阅Supporting Multiple Screens 上的此部分。

    【讨论】:

    • 问题是,我有一个 ViewPager 和操作栏选项卡,我无法在 XML 中控制(删除)而不会使应用程序崩溃。我不需要它们在大屏幕上,但我在小屏幕上需要。所以如果我按照你说的那样做,我会在ViewPager 上得到空指针。现在,我可以使用与密度无关的限定符以编程方式执行此操作吗?
    • 有几种不同的方法可以做到这一点......我看到here 的一个黑客但非常简单的方法是在你的 values.xml 中创建一个布尔值,另一个在res/values-sw720dp/values.xml 中,第一个为假,第二个为真。然后在代码中,获取布尔值。如果是真的,那么您使用的是 sw720dp 设备。
    • 第二种方法是获取 DisplayMetrics,获取窗口区域的像素尺寸,除以 (密度 / 160)(例如,1920x1080 hdpi 设备将是 (1080 / (240 / 160 )) == (1080 / 1.5) == 720dp)。
    • 非常好。我喜欢骇人听闻的方式。我会赞成你的回答。标记另一个人是正确的,因为这是我目前正在使用的。
    【解决方案2】:

    SCREENLAYOUT_SIZE_LARGE 替换为SCREENLAYOUT_SIZE_XLARGE

    if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE) {
        /* implementation */
    }
    

    如果可能,请避免使用已弃用的 largexlarge 限定符并使用新的 sw<N>dp 限定符。但是,根据您的目标受众和平台,您可能需要依赖较旧的方法,或者可能两者兼而有之。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多