【发布时间】:2023-04-02 15:12:02
【问题描述】:
我需要创建最初仅适用于平板电脑的应用。我知道“List-and-Detail”模式,其中有一个列表,点击列表会显示点击项目的详细信息。
只要所有的布局总是有两个窗格就完美了:一个用于项目列表,一个用于所选项目的详细信息。
好吧,在我的应用程序中,我想使用通常用于项目列表的第一个窗格作为应用程序中所有可用选项的菜单,第二个窗格占用大部分可用空间, 根据在第一个片段中选择的选项显示特定布局。
问题是第二个窗格并不总是由单个部分组成。
这些是我将遇到的所有可能的场景(带有红框的左侧部分代表应该始终显示的菜单):
1.由单个部分组成的详细信息窗格:
2。详细信息窗格由两个大小相同的部分组成,没有主从关系。
3.明细面板由两部分组成,确实有明细关系,但主控部分比明细部分宽
#编辑:
由于我的应用程序的主要目标是帮助服务员点菜,因此第三种情况在以下情况下发挥作用:
- 服务员从左侧菜单中选择“点餐”选项(我们假设它是图片中的“第二项”)
- 在详细信息窗格的第一部分,服务员可以在他们提供的所有食物类别中进行选择(假设它是顶部的列表),根据选择的类别,下面的列表显示了该特定下的所有菜肴类别。
- 服务员点击菜品后,它会自动添加到详细信息窗格的第二部分(在第一个场景中隐藏的部分)
4.由两部分组成的详细信息窗格,确实有主从关系,但详细信息部分比主部分宽。
我知道,如果想从不同大小的屏幕和方向重用布局,我必须使用片段,但必须动态确定一个以在详细信息窗格中显示两个或一个部分(片段)或哪个部分将比另一个更宽似乎需要做很多工作,老实说,我不知道该怎么做,因为我现在所知道的是主要活动,带有菜单窗格和详细信息窗格插槽的活动应该是类似这样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/menu"
android:layout_weight="30"
android:layout_width="0px"
android:layout_height="match_parent"
/>
<FrameLayout
android:id="@+id/content"
android:layout_weight="70"
android:layout_width="0px"
android:layout_height="match_parent"
/>
</LinearLayout>
您认为您可以在这里提供一些 UI 指南吗?也许我想太多了,我应该使用带有所需零件数量的单一线性布局。
提前致谢。
【问题讨论】:
-
我有点明白你想要什么,但也很困惑。你到底在哪里面对你的问题?是否确定如何为详细屏幕中的“第一部分”的大小分配不同的大小?如果是的话,我猜,最好为第一部分和第二部分设置一个固定大小,因为这不会破坏用户体验。改变尺寸会带来不好的用户体验。如果您询问如何在详细信息屏幕中添加两个布局,那么我认为答案是使用两个 FrameLayouts 并动态替换它们。以前没有在这种情况下工作过。但也许它会起作用..
-
@VamsiChalla 非常感谢您抽出时间来看看我的问题。好吧,我的问题是我不知道如何划分“详细信息”窗格,因为如您所见,根据菜单上选择的项目,它可以有一个或两个部分?我想使用片段,以便我可以将这些片段重用于纵向,但问题是,我应该使用三个
FrameLayout吗?如果是这样,我如何在不需要第三个FrameLayout时隐藏它?如何调整它们的大小以适应可用空间? -
您没有提到您计划如何根据方向改变不同的细节布局(例如,当您处于纵向时,场景 2 的两个细节部分会发生什么情况?)。您可以保留主详细信息模板,对于(不同的)详细信息部分使用包装片段,实际内容嵌套两个片段。这样,在包装片段中,您可以根据需要更改部分(并且基本上具有迷你主从关系)。
-
我们来谈谈DetailScreen。这就是我认为可行的方法.. 使用两个带有 layout_weight="1" 的 FrameLayouts 。我不确定何时可以看到两个 FrameLayout 以及何时显示一个 FrameLayout 的逻辑,但根据您需要显示 2 或 1 的时间,您可以将第二个 FrameLayout 的可见性设置为 View.GONE 或 View。 VISIBLE,因此如果第二个 FrameLayout 被隐藏,第一个 FrameLayout 将占用整个可用空间,这样,它将跨越整个 DetailScreen。您可能知道,使用 FrameLayout 的 id 来设置该片段的可见性
-
如果你想在 DetailScreen 中为第一个和第二个 FrameLayouts 设置不同的大小,请使用各自的权重,例如分别为第一个和第二个 FrameLayouts 设置 layout_weight="0.60" 和 "0.40"。这样,您将 DetailScreen 拆分为 3:2 的比例。我想你已经意识到了这一点,但以防万一。
标签: android android-layout android-fragments android-ui master-detail