11

Ho riscontrato un problema con una barra delle schede e ViewPager nel mio progetto Android. Ciò che fa l'app ha un'attività che ospita un layout di tabulazione e quindi ha 2 frammenti che rappresentano ciascuna delle schede.Frammento da Visualizza Cercapersone nascosto dietro Barra delle schede

Quando l'attività viene aperta, invia un'API per ottenere alcuni dati e inserisce i dati in un adattatore dati per un layout Recycler View e Card in ciascuno dei frammenti.

La vista del riciclatore conterrà 3 voci, ma solo 2 vengono visualizzate poiché il primo viene nascosto sotto la barra degli strumenti e/o la barra delle schede, come mostrato nella schermata seguente.

riportano di seguito le file di layout della mia attività

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.BoardiesITSolution.CritiMonApp.AppsActivity"> 

    <android.support.design.widget.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/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabGravity="fill" /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
     <!--app:layout_behaviour="@string/appbar_scrolling_view_behaviour" />--> 
</android.support.design.widget.CoordinatorLayout> 

Di seguito è il layout del frammento

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <view 
     android:id="@+id/recycler_view" 
     class="android.support.v7.widget.RecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerInParent="true" /> 
</LinearLayout> 

Di seguito è il layout per il layout della carta

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:cardview="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="80dp" 
    android:layout_margin="8dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:elevation="5dp"> 
     <TextView 
      android:id="@+id/txtApplicationName" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:maxLines="3" 
      android:padding="8dp" 
      android:textColor="#222" 
      android:textSize="15dp" 
      android:layout_centerInParent="true"/> 

    </RelativeLayout> 
</android.support.v7.widget.CardView> 

Sotto è lo screenshot come menzionato sopra che mostra t lui problema. Ho fatto un po 'di pixel del testo ma dovresti capire cosa voglio dire, ci dovrebbero essere 3 voci ma il primo elemento si nasconde sotto la barra delle schede.

Screenshot showing the issue

Grazie per tutto l'aiuto che possono fornire

+0

Nel mio caso, il La vista Recycler appariva finita le schede. Anche la soluzione sottostante mi ha aiutato. – h8pathak

risposta

24

Edit: Come suggerito da sotto @smeet e @hardik, aggiungendo il comportamento di scorrimento app:layout_behavior="@string/appbar_scrolling_view_behavior" dovrebbe risolvere il problema, preservando il comportamento di scorrimento. I comportamenti di scorrimento funzionano solo se la vista è figlia diretta del layout del coordinatore.


Vecchio risposta

Basta avvolgere il layout appbar e viewpager in un LinearLayout verticale

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.BoardiesITSolution.CritiMonApp.AppsActivity"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     //appbar layout 

     //viewpager  


    </LinearLayout> 

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

Dalla documentazione, CoordinatorLayout is a super-powered FrameLayout. Quindi puoi aspettarti il ​​tipico comportamento di FrameLayout come "viste panoramiche su altre viste".

+0

Ah, così semplice, grazie per il tuo aiuto – Boardy

+0

Super lavoro !! Si è risolto .. –

+0

hai fatto la mia giornata –

11

Aggiunta:

app: layout_behavior = "@ string/appbar_scrolling_view_behavior"

in ViewPager problema risolto nel mio caso.

+0

@questa risposta dovrebbe essere accettata perché se avvolgeremo il layout appbar con layout lineare rispetto alla barra degli strumenti non si nasconderà quando scorrerai. – Hardik

+0

Eccellente, sembra essere il modo più semplice per farlo – GEPD

4

se si avvolge il layout della barra delle applicazioni con un layout lineare rispetto alla barra degli strumenti non si nasconde quando si scorre in modo che la risposta accettata potrebbe non essere di aiuto se si desidera nascondere la barra degli strumenti quando si scorre.

Smeet ha fatto nel modo giusto ma non ha spiegato! ecco un esempio completo con spiegazione.

aggiungere app namspace a CoordinatorLayout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
xmlns:app="http://schemas.android.com/apk/res-auto" 
...... 
> 

e basta aggiungere sotto la linea nel vostro ViewPager

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

completa XML sarà, come di seguito

<?xml version="1.0" encoding="utf-8"?> 
<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.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

      /> 

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

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


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

Hai ragione. LinearLayout non è la soluzione. – Smeet

Problemi correlati