3

在我的应用程序中,我目前仅支持某些活动的纵向,因为我假设大多数手机用户大部分时间都会使用纵向(并用一只手握住设备)。

然而,在新的 Honeycomb 平板电脑上,用户似乎会更频繁地使用横向方向,因此我希望在我的更多活动中同时支持这两种方向。

不过,我宁愿不必返回并为较小的屏幕尺寸添加横向布局(一直到 QVGA),所以我想知道是否有一种方法仅支持 xlarge 屏幕类型的横向布局,但不支持其他。

4

1 回答 1

8

您可以组合资源对象的方向和大小属性,例如:

res/layout/             -- default
res/layout-port/        -- portrait for any screen size
res/layout-xlarge/      -- any orientation on xlarge screens
res/layout-xlarge-land/ -- landscape on xlarge screens

layout-port目录用于仅纵向布局的较小屏幕尺寸,然后将 xlarge 布局添加到layout-xlarge目录中,如果您想在 xlarge 上为纵向和横向使用相同的布局文件,或者layout-xlarge-land如果layout-xlarge-port您想要不同的布局文件,具体取决于方向。

然后,当您在较小屏幕的设备上旋转到横向时,操作系统将尝试加载横向布局,但由于没有匹配的布局而失败并抛出Resources.NotFoundException. 但是,您可以捕获该异常,并在这些情况下使用以下命令强制活动进入纵向模式Activity.setRequestedOrientation()

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        setContentView(R.layout.titlescreen);
    } catch (Resources.NotFoundException e) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        return;
    }
    [...]
}

这将导致在纵向模式下重新创建活动,并且不会尝试再次更改,因为使用setRequestedOrientation()会覆盖方向传感器。

于 2011-01-27T08:55:32.240 回答