16

Sto cercando di far crashare la barra degli strumenti quando si scorre una riciclabilità all'interno di un frammento. Per iniziare, ecco il mio layout principale:Barra degli strumenti nascosta sullo scroll con recyclerview all'interno frammento

<DrawerLayout> 

    <RelativeLayout 
     android:id="@+id/mainRelativeLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 

     <android.support.design.widget.CoordinatorLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      > 

      <android.support.design.widget.AppBarLayout 
       android:id="@+id/appBarLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       > 

       <Toolbar 
        android:id="@+id/toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:elevation="5dp" 
        app:layout_scrollFlags="scroll|enterAlways" 
        > 

       </Toolbar> 

      </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> 

    </RelativeLayout> 

<!-- ignore --> 
<drawercontents> 
</DrawerLayout> 

Quindi, come si può intuire i miei frammenti vengono caricati in @id/container. Il mio primo frammento contiene il recyclerview, e ho impostato app:layout_behavior="@string/appbar_scrolling_view_behavior" in quella panoramica. Funziona e la barra degli strumenti si interrompe durante lo scorrimento. Il problema è che la barra degli strumenti copre i contenuti principali del frammento quando non è compresso. L'aggiunta di un margine superiore al contenitore dei frammenti uguale alla dimensione della barra degli strumenti fa sì che rimanga uno spazio vuoto quando la barra degli strumenti viene compressa (ovviamente).

Cosa manca qui? Qualche idea?

EDIT: Come richiesto, ecco il layout per il frammento che contiene il recyclerview:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.RecyclerView 
    android:id="@+id/feed" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00000000" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
+0

Puoi pubblicare anche il layout del tuo frammento? – saeed

+0

@ aggiunto, controllare la modifica. – Orbit

+0

Lasciami controllare ho lo stesso problema ... e ho risolto il mio ... ho bisogno di poco tempo – saeed

risposta

-1

nel vostro framelayout impostare

android:layout_below="@+id/appBarLayout" 

se questo non funziona allora provate questo:

android:layout_below="@+id/toolbar" 
+2

'android: layout_below' può essere usato con i bambini di un' RelativeLayout'. Un 'CoordinatorLayout' è fondamentalmente una versione avanzata di un' FrameLayout', quindi non fa nulla. – Orbit

0

<android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:contentScrim="?attr/colorPrimary" 
     > 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/appBar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:layout_collapseMode="pin" /> 

    </android.support.design.widget.CollapsingToolbarLayout> 
</android.support.design.widget.AppBarLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_below="@+id/app_bar_layout" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    android:weightSum="1"> 
    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/colorAccent" 
     > 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:text="Your recycler view should go here"/> 
     </FrameLayout> 
</LinearLayout> 

enter image description here

+0

Questo non ha nulla a che fare con questo problema. – Orbit

+0

scusa .. ma vuoi crollare la barra degli strumenti se studi questo pezzo di codice lo avrai .. se non vuoi che la vista dell'immagine rimuova che ... questo codice funziona come il layout del profilo di Whatsapp ... quindi non vuoi che l'immagine rimuova ... basta provarlo vedrai il suo funzionamento –

+0

ora controlla che ho rimosso imageview basta usarlo nel tuo codice e gentilmente rimuovere -1 vote –

2

ho usato un SwipeRefreshLayout o solo una LinearLayout o RelativeLayout come la radice della disposizione s' il Fragment e sta funzionando.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/swipe_refresh_layout_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/mycustomcolor" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</android.support.v4.widget.SwipeRefreshLayout> 

Con RelativeLayout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/fragment2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view_android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</RelativeLayout> 

, allora dovrebbe essere a posto.

2

Il mio amico l'ho fatto oggi e funziona perfettamente, ho 2 frammenti entrambi hanno RecyclerView e può scorrere Toolbar. Ho guardato chrisbanes'sCheeseSquare: CheeseSquare

Se si dà un'occhiata a MainActivity, v'è 3 frammenti in TabLayout e tutti loro può scorrere Toolbar. Così ho preparato questo layout, forse si avrà uno sguardo a:

mia activity_home.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <include layout="@layout/content_home"/> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     android:layout_gravity="start" 
     app:menu="@menu/homepage_leftdrawer"> 


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

</android.support.v4.widget.DrawerLayout> 

E content_home.xml:

<?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" 
    android:id="@+id/root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme3.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|snap" /> 


<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabTextColor="@color/Transparent_few_white" 
    app:tabIndicatorColor="@color/White" 
    app:tabTextAppearance="@style/TabLayoutTextStyle" 
    app:tabIndicatorHeight="3dp" 
    app:tabSelectedTextColor="@color/White" 
    android:background="@color/ColorPrimary" 
    app:tabPaddingStart="0dp" 
    app:tabPaddingEnd="0dp"/> 

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

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

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

Dove è la chiave qui:

Se dai un'occhiata al mio ViewPager, io t ha l'attributo app:layout_behavior="@string/appbar_scrolling_view_behavior" Allora è così. Non aggiungere altri comportamenti in frammento.Prova così e vieni con i risultati, per favore!

+0

questo è il risultato che ottengo: https://www.youtube .com/watch? v = v7fxM1pSrqw – Manos

+0

Puoi provare ad aggiungere un comportamento al tuo riclassifico –

3

Hai bisogno di qualcosa di simile all'app Play Store. Incollare i layout qui. Il codice per questo è semplice e puoi codificarlo da solo.

  1. FrameLayout
    • ImageView
    • ScrollView
      1. LinearLayout
      2. HorizontalScrollView
        • LinearLayout
    • ToolBar

con la gerarchia di layout di cui sopra si può ottenere qualcosa di simile:

enter image description here

2

non hanno ancora testato, ma questo è ciò che è necessario do:

  • Spostare app:layout_behavior="@string/appbar_scrolling_view_behavior" su FrameLayout con ID container.
  • Aggiungi android:fitsSystemWindows = "true" al tuo AppBarLayout.

Questo è esattamente ciò che sto facendo nella mia app, e funziona. Se questo non funziona, prova a pulire (su Android Studio, Build -> Pulisci progetto) il tuo progetto ed esegui nuovamente l'app.

4

Fai un nome layout toolbar.xml e includerlo nel codice in cui si desidera utilizzare, ma ricordare una cosa si prega di non utilizzare alcuna altra disposizione come Relativelayout, LinearLayout e altro sul sopra di

3

Puoi utilizzare il layout Crollare come

<?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" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapse_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:fitsSystemWindows="true" 
      app:contentScrim="@color/zxing_transparent" 
      android:paddingBottom="2dip" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:expandedTitleGravity="bottom|center_horizontal" 
      app:expandedTitleMarginBottom="50dip" 
      app:collapsedTitleGravity="top|center_vertical" 
      app:collapsedTitleTextAppearance="@style/collapseTitle"> 

      <Toolbar 
        android:id="@+id/toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:elevation="5dp" 
        app:layout_scrollFlags="scroll|enterAlways" 
        > 
       </Toolbar> 



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

    </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> 
2

È possibile risolvere questo con l'aggiunta di una terza bandiera - snap, a layout_scrollFlags proprietà.

<Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:elevation="5dp" 
    app:layout_scrollFlags="scroll|enterAlways|snap" /> 

L'utilizzo di questa opzione determinerà cosa fare quando solo una vista è stata parzialmente ridotta. Se lo scorrimento termina e la dimensione della vista è stata ridotta a meno del 50% dell'originale, questa vista torna alla sua dimensione originale. Se la dimensione è superiore al 50% delle sue dimensioni, scomparirà completamente.

controllare questo link.

5
<?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" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/tabanim_appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/tabanim_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways|snap" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 
+0

Questo funziona bene .. –

+1

Potrei chiedere per favore quale sia il contenuto della variabile "string/appbar_scrolling_view_behavior" – iOSAndroidWindowsMobileAppsDev

0

Anche incontrato questo problema. Ma è stata trovata una soluzione. La soluzione con rilavorazione xml non può essere, quindi è necessario farlo a livello di programmazione. Tutto ciò di cui abbiamo bisogno è Inflater. Sì, sì, è così semplice.Al volo cambia xml per far funzionare tutto lo scorrimento.

Problemi correlati