我有一个具有这样屏幕的应用程序(在 10 英寸平板电脑上):
现在我需要修改该应用程序以使其也可以在手机上运行。由于屏幕会更小,我想采用“拆分视图” UI 并对其进行更改,以便单独显示左侧列表视图,然后在选择一行时显示适当的右侧列表视图。
我如何在应用程序中处理这个问题,因为一个活动当前处理两个列表视图,我猜手机每个列表视图都需要两个。
我如何检测要执行哪一个?
谢谢
我有一个具有这样屏幕的应用程序(在 10 英寸平板电脑上):
现在我需要修改该应用程序以使其也可以在手机上运行。由于屏幕会更小,我想采用“拆分视图” UI 并对其进行更改,以便单独显示左侧列表视图,然后在选择一行时显示适当的右侧列表视图。
我如何在应用程序中处理这个问题,因为一个活动当前处理两个列表视图,我猜手机每个列表视图都需要两个。
我如何检测要执行哪一个?
谢谢
您应该查看 MasterDetailedFlow 导航模板。Eclipse:NewProject>检查创建活动>选择“MasterDetailedFlow”导航类型。看看Android上的数据绑定
请参阅支持不同的屏幕尺寸。
通常这是使用 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);
请记住,当您尝试访问它们时,单窗格布局中不存在的视图将为空(例如,不再有两个ListView
s)。检查某个 View 是否存在是检测您正在使用的布局的一种方法。
还要注意在 XML 文件中使用可选的布尔资源。这是将“是大屏幕还是小屏幕”变量传递给 Java 代码的便捷方式。您可以像这样在 Activity 中访问布尔资源:
boolean isTwoPane = getResources().getBoolean(R.bool.twopane);