Je ne peux pas empêcher la barre de navigation des systèmes de masquer mon contenu!
On me fait défiler jusqu'au bas de la liste de recyclage, mais cela se cache derrière la barre de navigation. Voici ma mise en page XML.
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/root"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
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/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:fitsSystemWindows="true"
Android:id="@+id/viewpager"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.melnykov.fab.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|right"
Android:layout_margin="16dp"
app:fab_colorNormal="@color/accent"
app:fab_colorPressed="@color/accent_dark" />
Voici la disposition des fragments que vous voyez sur la photo.
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:padding="8dp">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical"/>
</FrameLayout>
J'ai essayé d'ajouter Android: fitsSystemWindows = "true" dans chaque élément de mise en page que je pouvais, mais cela n'a pas fonctionné. D'autres discussions mentionnent l'ajout d'une marge calculée à partir de la barre, mais cela ne semble pas être la solution appropriée. J'ai saisi cette présentation directement à partir de l'application CheesSquare de Google pour la démonstration de l'application, et celle-ci semble fonctionner correctement.
Je l'ai compris. Dans ma situation particulière, chacun de mes fragments gère sa propre instance de barre d'outils. J'appelais setSupportActionBar () dans la méthode onViewCreated () sur mes fragments. Déplacer cette fonctionnalité dans onCreateView () l'a résolu.
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_account, container, false);
setupToolbar((Toolbar) view.findViewById(R.id.toolbar));
return view;
}
private void setupToolbar(Toolbar toolbar) {
toolbarController.registerToolbar(toolbar);
toolbarController.setActivityTitle("My Account");
}
(registerToolbar () appelle setSupportActionBar () dans l'activité d'hébergement).
J'espère que cela aide tout le monde!
La vue racine de fragment de Viewpager doit être RecyclerView
ou NestedScrollView
. FrameLayout
ne prend pas en charge le comportement de défilement de CoordinatorLayout
et c’est pourquoi il ne fonctionne pas bien.
Comment corriger la disposition des fragments du viewpager: ne placez pas RecyclerView
dans FrameLayout
. Déclarez plutôt RecyclerView
à la racine. Vous pouvez également définir padding="8dp"
sur RecyclerView
, utilisez simplement Android:clipToPadding="false"
.
Le problème est d'utiliser AppBarLayout
. La CoordinatorLayout
a été introduite en tant que puissant FrameLayout
qui apporte des animations de Nice basées sur Behaviors
défini. Si nous voulons ajouter une sorte d'animation scroll
, telle que collapsing toolbar
, etc., nous devons envelopper notre Toolbar
avec AppBarLayout
, mais lorsque nous voulons placer un contenu statique dans CoordinatorLayout
, tel que ViewPager
dans votre cas, nous ne le faisons pas besoin d'utiliser AppBarLayout
du tout:
activity_main.xml:
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:context="com.mydemoci.MainActivity">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<include layout="@layout/content_main"/>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="@dimen/fab_margin"
Android:src="@Android:drawable/ic_dialog_email"/>
</Android.support.design.widget.CoordinatorLayout>
content_main.xml:
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#A1D490"
// Remember CoordinatorLayout is a kind of FrameLayout,
// so we have to provide top margin to make Toolbar visible
Android:layout_marginTop="?attr/actionBarSize"
tools:context="com.mydemoci.MainActivity"
tools:showIn="@layout/activity_main">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:background="@color/colorAccent"
Android:text="Hello World"
Android:textSize="30sp"/>
</RelativeLayout>
Accédez à style.xml et supprimez ces deux éléments ou définissez leurs valeurs "true" sur "false".
<item name="Android:windowTranslucentStatus">true</item>
<item name="Android:windowTranslucentNavigation">true</item>
Dans mon cas, le problème a été résolu en supprimant ces deux valeurs de styles de thème.
Ajouter simplement la marge inférieure à View Pager
corrige le problème pour moi.
Voici le code dans mon activité_main.xml
<Android.support.v4.view.ViewPager
Android:id="@+id/main_viewPager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginBottom="55dp"/>
<Android.support.design.widget.BottomNavigationView
Android:id="@+id/navigation"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />