7

我正在尝试使用片段重现 Honeycomb GMail UI,但不能。这就是我想要的

初始状态:

+--------+---------------+
|        |               |
|Accounts|   Folders     |
|        |               |
+--------+---------------+

选择文件夹后:

+--------+---------------+
|        |               |
|Folders |   Items       |
|        |               |
+--------+---------------+

其中 Accounts、Folders 和 Items 是片段。(显然后退按钮应该进入初始状态)

我尝试了以下布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="horizontal" 
   android:id="@+id/root">

   <FrameLayout
     android:id="@+id/left_pane" android:layout_weight="1"
     android:layout_width="0px" android:layout_height="match_parent" />

   <FrameLayout
      android:id="@+id/right_pane" android:layout_weight="1.6"
      android:layout_width="0px" android:layout_height="match_parent" />
</LinearLayout>

不幸的是,这不起作用,因为我无法将我的文件夹片段从右窗格移动到左窗格(片段只能添加一次)。我可以改为创建新文件夹,但这非常浪费资源,需要仔细的状态管理(尤其是在按下后退按钮时)并且看起来不像我想要的那样。

我尝试使用 3 个 FrameLayout(左、中、右,权重为 1、1.6、2.56),但是当片段未显示时,我无法使 FrameLayout 折叠。非常感谢任何帮助

4

3 回答 3

6

使用 Nicholas 的帖子建议的三帧布局在我的应用程序中效果很好。为了保持比例正确,您可能需要动态更改布局权重(尽管我认为可以不这样做)。我使用这个辅助方法来处理所有这些逻辑。请注意,它需要几个助手;一般来说,他们的名字应该很清楚他们需要做什么,所以我没有在这里发布。不过,有一件事是我有一个包含所有框架持有者的成员数组,所以这个方法可以自动隐藏任何不需要的东西。

    final private void showFrames(View leftFrame, View rightFrame) {
    // Hide frames that should be gone
    for (View frame : mContentFrames) {
        if (frame != leftFrame && frame != rightFrame) {
            frame.setVisibility(View.GONE);
            Fragment frag = getFragmentManager().findFragmentById(frame.getId());
            if (frag != null) {
                getFragmentTransaction().remove(frag);
            }
        }
    }

    // Set up the left frame
    if (leftFrame != null) {
        leftFrame.setVisibility(View.VISIBLE);
        leftFrame.setLayoutParams(new LayoutParams(0, LayoutParams.FILL_PARENT, 3));
    }

    // Set up the right frame
    if (rightFrame != null) {
        rightFrame.setVisibility(View.VISIBLE);
        rightFrame.setLayoutParams(new LayoutParams(0, LayoutParams.FILL_PARENT, 7));
    }

    // TODO: set up animation

    // Start the transition
    commitTransition();
}

希望有帮助!--兰迪

于 2011-06-09T14:32:31.543 回答
2

我认为您可以使用 3 FrameLayouts 并隐藏未使用的框架。所以最初项目框架是隐藏的。当在文件夹框架中选择一个项目时,帐户框架被隐藏并且项目名称可见。Folder 框架(或主要活动)必须拦截后退按钮,以便它可以隐藏 Items 框架并使 Account 框架可见。

于 2011-06-03T18:18:31.773 回答
1

我认为您可以从 StackScrollView for Android中获得一些想法。

https://github.com/raweng/Android-StackScrollview

于 2012-02-25T03:18:05.117 回答