29

現在、Android のデザイン サポート ライブラリで問題がFrameLayout発生していますが、この投稿CoordinatorLayoutの手順に従ってタブを作成しました。

基本的に、ほとんどのことが期待どおりに機能し、コンテナFrameLayoutフラグメントがインフレートされ、それらのタブ フラグメントがタブとして正しく追加さViewPagerれます (レイアウトを再利用するフラグメントが多数あるため、この方法が必要です)。

私が苦労している問題は、FrameLayout(結果としてタブフラグメントも)が画面の高さ全体を消費するため、ToolbarTabLayout. 問題を視覚化するために、次の画像を作成しました。

可視化された問題

CoordinatorLayoutToolbar、およびを使用したベース レイアウトTabLayout:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <include layout="@layout/toolbar" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.design.widget.CoordinatorLayout>

にインフレートされたフラグメントによって使用される別のレイアウトcontainer:

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

すべてのフラグメントは私のBaseFragment-class によって膨らまされます (SO 呼び出しに関する別の投稿でinflater.inflate(getLayoutRes(), null);は、同じ問題を引き起こす問題でした)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(getLayoutRes(), container, false);
}

CoordinatorLayoutを通常LinearLayoutのに置き換えると、予想どおりFrameLayoutの下で始まりますが、ドキュメントによると、ほとんどの機能は の直接の子である必要があります。AppBarLayoutAppBarLayoutCoordinatorLayout

marginTopに aを追加することもできFrameLayoutますが、これに対する適切な解決策があるかどうかを知りたいです。ヒントをお寄せいただきありがとうございます!

4

1 に答える 1

46

に移動app:layout_behavior="@string/appbar_scrolling_view_behavior"しますFrameLayout- その属性は の直接の子にある必要がありますCoordinatorLayout

于 2015-09-06T19:29:30.193 に答える