0

我的应用程序应该使用以下逻辑决定是在双窗格还是单窗格中显示:

  1. 对于所有屏幕尺寸,如果在单窗格中纵向显示
  2. 对于 SMALL 和 NORMAL 屏幕尺寸,如果在 SINGLE-PANE 中横向显示
  3. 对于 LARGE 和 XLARGE 屏幕尺寸,如果在双窗格中横向显示

我正在为 Android 2.3.3 SDK 开发,所以 Android 3.0 SDK 的好功能在这里不适用。我在下面开发的函数总是为所有屏幕尺寸和方向组合返回 SINGLE-PANE。这里可能出了什么问题?

/**
 * Determine if a dual pane is appropriate.
 * 
 * @param null
 * @return boolean
 */

public boolean isDualPane() {

    boolean dualPane    = false;

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

        if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {

            dualPane    = true;
        }
    }

    Log.d("ORIANTATION", (dualPane) ? "DUAL PANE" : "SINGLE PANE");

    return dualPane;
}
4

2 回答 2

2

我找到了答案。上面的功能没有任何问题!问题出在我的模拟器的配置上。我创建了一个 WVGA800 设备,并将 LCD 密度设置为 240 而不是 160。这使它成为正常尺寸而不是大尺寸。所以statememntConfiguration.SCREENLAYOUT_SIZE_LARGE总是评估为2而不是3。所以if statement每次都失败了。它现在工作正常。

还有一件事,这个

        if ((getResources().getConfiguration().screenLayout 
           & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {

            dualPane    = true;
        }

需要改为:

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

            dualPane    = true;
        }

为了满足 XLARGE 屏幕的需求。

于 2012-05-08T10:41:19.237 回答
0

我对双窗格不太了解,但我建议您从 XML 控制配置 Small-Normal-Large-Xlarge 布局。

例子 :

  1. 所有屏幕尺寸 - 纵向。它采用默认布局文件夹: res/layout
  2. 小屏幕尺寸 - 横向: res/layout-small-land
  3. 大 Xlarge 屏幕尺寸 - 横向:res/layout-large-land

它可能会帮助你。:)

参考:屏幕尺寸

于 2012-05-07T10:02:01.787 回答