0

我有一个具有这样屏幕的应用程序(在 10 英寸平板电脑上):

在此处输入图像描述

现在我需要修改该应用程序以使其也可以在手机上运行。由于屏幕会更小,我想采用“拆分视图” UI 并对其进行更改,以便单独显示左侧列表视图,然后在选择一行时显示适当的右侧列表视图。

我如何在应用程序中处理这个问题,因为一个活动当前处理两个列表视图,我猜手机每个列表视图都需要两个。

我如何检测要执行哪一个?

谢谢

4

2 回答 2

1

您应该查看 MasterDetailedFlow 导航模板。Eclipse:NewProject>检查创建活动>选择“MasterDetailedFlow”导航类型。看看Android上的数据绑定

于 2012-12-21T23:47:45.590 回答
1

请参阅支持不同的屏幕尺寸

通常这是使用 Fragments 完成的,但无论您是否使用 Fragment,基本思想都是相同的。您可以根据屏幕大小为 Activity 创建两种不同的布局。

  • 将手机的默认布局单窗格保存在res/layout/activity_main.xml
  • 将双窗格平板电脑布局保存在res/layout/activity_main_twopane.xml

然后,您使用具有链接中描述的屏幕尺寸限定符的布局别名文件来确定何时应使用平板电脑布局。例如,要在large屏幕和最宽方向至少 600dp 的屏幕上显示双窗格布局(包括 Galaxy S3 等大屏幕手机),您可以这样做:

  • res/values-large/layout.xml包含:

    <resources>
        <item name="activity_main" type="layout">@layout/activity_main_twopane</item>
        <bool name="twopane">true</bool>
    </resources>
    
  • res/values-sw600dp/layout.xml包含:

    <resources>
        <item name="activity_main" type="layout">@layout/activity_main_twopane</item>
        <bool name="twopane">true</bool>
    </resources>
    

当您的 Activity 加载布局时,Android 系统将负责加载正确的布局文件(或res/layout/activity_main.xml或):res/layout/activity_main_twopane.xml

setContentView(R.layout.activity_main);

请记住,当您尝试访问它们时,单窗格布局中不存在的视图将为空(例如,不再有两个ListViews)。检查某个 View 是否存在是检测您正在使用的布局的一种方法。

还要注意在 XML 文件中使用可选的布尔资源。这是将“是大屏幕还是小屏幕”变量传递给 Java 代码的便捷方式。您可以像这样在 Activity 中访问布尔资源:

boolean isTwoPane = getResources().getBoolean(R.bool.twopane);
于 2012-12-21T23:57:29.667 回答