web-dev-qa-db-ja.com

Android SupportLib-AppBarLayoutが画面全体の高さを消費するCoordinatorLayoutのFrameLayout

Android design-support libraryからのFrameLayout内のCoordinatorLayoutで問題が発生していますが、これからの指示に従いました post タブの作成中。

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

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

Visualized issue

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に置き換えた場合、FrameLayoutAppBarLayoutの下から始まりますが、予想どおり documentationAppBarLayoutのほとんどの機能では、CoordinatorLayoutの直接の子である必要があります。

marginTopFrameLayoutに追加することもできますが、これに適切な解決策があるかどうか知りたいです。ヒントを事前にありがとう!

27
sschmid

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

41
ianhanniballake