6

Dovrebbe essere impostato sul genitore di pari livello AppBarLayout o nella prima Vista scorrevole all'interno del fratello?Dove si deve impostare 'app: layout_behavior'?


Con Material Design for Android, ci sono Views che lavoriamo con il comportamento del layout seconda suoi dintorni, uno di questi è CoordinatorLayout, come this CodePath guide menzioni:

CoordinatorLayout estende la capacità di realizzare molti degli effetti a scorrimento di Google Material Design di . Attualmente, ci sono diversi modi forniti in questo framework che consentono di lavorare senza che richiede di scrivere il proprio codice di animazione personalizzato.

Quello che mi interessa ora è:

  • Espansione o contrarre la barra degli strumenti o lo spazio di testa per fare spazio per il contenuto principale.

Così, useremmo la AppBarLayout con un set Toolbar con app:layout_scrollFlags e un altro fratello ViewGroup al AppBarLayout con app:layout_behavior.

La mia domanda è: in quale esatto ViewGroup (o forse View) dovremmo mettere quello app:layout_behavior?


Finora, ho provato con (e hanno tutti lavorato , e sono tutti fratelli alla AppBarLayout):

  • scorrimento Guarda

  • Prima ViewGroup all'interno di una vista scorrevole

  • ScrollView all'interno di un ViewGroup

E questo non ha funzionato:

  • ViewGroup senza visualizzazione scorrevole bambini.

Esistono molteplici esempi on-line, ma nessuno di loro realmente stato in cui si dovrebbe mettere, come:

http://www.ingloriousmind.com/blog/quick-look-on-the-coordinatorlayout/ https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout https://developer.android.com/training/basics/firstapp/building-ui.html https://www.bignerdranch.com/blog/becoming-material-with-android-design-support-library/

risposta

7

controllare questo link:https://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

AppBarLayout richiede anche un fratello di scorrimento separato al fine di sapere quando scorrere. Il legame avviene attraverso la classe AppBarLayout.ScrollingViewBehavior, il che significa che si necessario impostare il comportamento del vostro vista scorrimento ad essere un'istanza diAppBarLayout.ScrollingViewBehavior. È disponibile una risorsa stringa contenente il nome completo della classe .

Hanno detto a tale proposito, dovrebbe essere il View, che verrà mostrato sotto l'AppBarLayout in questo modo:

<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.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <!-- Your scrolling content --> 

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

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

     <android.support.v7.widget.Toolbar 
       ... 
       app:layout_scrollFlags="scroll|enterAlways"/> 

     <android.support.design.widget.TabLayout 
       ... 
       app:layout_scrollFlags="scroll|enterAlways"/> 

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

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

La mia domanda è: in quello esatto ViewGroup (o forse View) dovremmo inserire che app:layout_behavior?

E in questo link: http://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

Quindi, abbiamo bisogno di definire un'associazione tra la AppBarLayout e la vista che verrà scorrere. Aggiungi un app:layout_behavior a RecyclerView o qualsiasi altra vista in grado di scorrere nidifica come NestedScrollView. La libreria di supporto contiene una speciale stringa risorsa @string/appbar_scrolling_view_behaviorche mappa AppBarLayout.ScrollingViewBehavior, che viene utilizzato per notificare al AppBarLayout quando gli eventi di scorrimento si verificano in questa particolare visione. Il comportamento deve essere stabilito sulla vista che attiva l'evento.

+1

"Visualizza capacità di scorrimento annidato" è importante, suppongo, se si disabilita nestedScrolling su recyclerView non funziona –

+0

@Jemshit Iskenderov ha ragione non è mai impostato su recyclerView.setNestedScrollingEnabled (false); stai usando riciclatore solo dopo AppBarLayout, o la tua vista del riciclatore non è all'interno di NestedScrollView. –

2

app:layout_behavior deve essere impostato su quei punti di vista che sono figlio diretto di aspetto di Coordinatore

+0

Qual è il layout del coordinatore in realtà? non mi dispiace .., io sono poco nuovo per Android Dev. – eRaisedToX

+0

@eRaisedToX Non è altro che un FrameLayout con alcune funzioni di aggiunta. Controllalo una volta https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html – Ranjit

0

Assicurarsi si è aggiunto il campo appbar_scrolling_view_behavior nel vostro String.xml

<!-- The class name to the ScrollingChildBehavior required for AppBarLayout --> 
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string> 

E come tutti sanno abbiamo appena possiamo usare questa come di seguito

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

Il suo solo per info non risposta OP.

+0

La libreria di supporto alla progettazione definisce già quella risorsa stringa . Non c'è nulla da guadagnare ridefinendolo nelle tue risorse. –

+0

Forse hai ragione. Ho dimenticato, ma ho affrontato il problema e l'ho risolto dopo averlo aggiunto in string.xml. – Ranjit

Problemi correlati