7

Honeycomb GMail UI をフラグメントで再現しようとしていますが、できません。これが私が欲しいものです

初期状態:

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

フォルダを選択した後:

+--------+---------------+
|        |               |
|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>

残念ながら、フォルダ フラグメントを右ペインから左ペインに移動できないため、これは機能しません (フラグメントは 1 回しか追加できません)。代わりに新しいフォルダーを作成することもできますが、これはかなりリソースを浪費し、注意深い状態管理が必要で (特に戻るボタンが押された場合)、希望どおりに表示されません。

3 つの FrameLayout (左、中央、右、重み 1、1.6、2.56) を使用してみましたが、フラグメントが表示されていないときに FrameLayout を折りたたむことができません。どんな助けでも本当に感謝しています

4

3 に答える 3

6

Nicholas の投稿で提案されている 3 つのフレーム レイアウトを使用すると、私のアプリではうまく機能します。比率を正しく保つために、レイアウトの重みを動的に変更する必要があるかもしれません (ただし、これを行わなくてもよいと思います)。このヘルパー メソッドを使用して、このすべてのロジックを処理します。いくつかのヘルパーが必要であることに注意してください。一般に、名前から何をする必要があるかは明らかなはずなので、ここには掲載しませんでした。ただし、すべてのフレーム ホルダーを含むメンバー配列があるため、このメソッドは不要なものを自動的に非表示にできます。

    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つのFrameLayoutを使用して、未使用のフレームを非表示にできると思います。したがって、最初はアイテムフレームが非表示になっています。フォルダフレームでアイテムを選択すると、アカウントフレームが非表示になり、アイテムの名声が表示されます。フォルダフレーム(またはメインアクティビティ)は、アイテムフレームを非表示にし、アカウントフレームを表示できるように、戻るボタンをインターセプトする必要があります。

于 2011-06-03T18:18:31.773 に答える
1

Android用のStackScrollViewからいくつかのアイデアを得ることができると思います..

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

于 2012-02-25T03:18:05.117 に答える