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:
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 BaseFragment
sur 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!
Bouger ton app:layout_behavior="@string/appbar_scrolling_view_behavior"
au FrameLayout
- cet attribut doit se trouver sur l'enfant direct du CoordinatorLayout
.