web-dev-qa-db-fra.com

Android SupportLib - FrameLayout dans CoordinatorLayout avec AppBarLayout consommant toute la hauteur de l'écran

J'ai actuellement un problème avec un FrameLayout dans un CoordinatorLayout de Android bibliothèque de support de conception alors que j'ai suivi les instructions de ce post lors de la création des onglets.

Fondamentalement, la plupart des choses fonctionnent comme prévu, les fragments de conteneur sont gonflés dans le FrameLayout et leurs fragments d'onglet sont correctement ajoutés aux ViewPager sous forme d'onglets (besoin de cette façon car j'ai de nombreux fragments qui devrait réutiliser la mise en page).

Le problème avec lequel je me bats est que le FrameLayout (et par conséquent aussi les tab-fragments) consomme toute la hauteur de l'écran donc il chevauche le Toolbar et le TabLayout . Afin de visualiser le problème, j'ai créé l'image suivante:

Visualized issue

Présentation de base avec CoordinatorLayout, Toolbar et 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>

Disposition séparée utilisée par les fragments gonflés dans 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" />

Tous les fragments sont gonflés par ma classe BaseFragmentsur un autre post sur SO appelant inflater.inflate(getLayoutRes(), null); était le problème à l'origine du même problème)

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

Si je remplace le CoordinatorLayout par un LinearLayout normal, le FrameLayout commence en dessous du AppBarLayout comme prévu mais selon le --- (documentation le AppBarLayout pour la plupart de ses fonctionnalités, il doit être un enfant direct de CoordinatorLayout.

Je pourrais simplement ajouter un marginTop au FrameLayout mais je voudrais savoir s'il existe une solution appropriée pour cela. Merci d'avance pour tout indice!

27
sschmid

Bouger ton app:layout_behavior="@string/appbar_scrolling_view_behavior" au FrameLayout - cet attribut doit se trouver sur l'enfant direct du CoordinatorLayout.

41
ianhanniballake