6

Czy należy ustawić na rodzica rodzica lub na pierwszym przewijanym widoku w jego rodzeństwie?Gdzie należy ustawić "app: layout_behavior"?


Z Material Design for Android istnieją Views które pozwalają nam pracować z zachowaniem układu w zależności od jego otoczenia, jedna z nich jest CoordinatorLayout, jak this CodePath guide wspomina:

CoordinatorLayout przedłuża zdolność do Wykonaj wiele z przewijanych efektów Material Design Google. Obecnie istnieje kilka sposobów zapewnionych w tym środowisku, które umożliwiają pracę bez konieczności pisania własnego kodu animacji.

Ten Jestem zainteresowany jest teraz:

  • Rozszerzanie lub zarażenia się pasek lub przestrzeni nagłówka, aby zrobić miejsce dla głównej zawartości.

Tak, chcielibyśmy użyć AppBarLayout z Toolbar z app:layout_scrollFlags zestawu i innymi ViewGroup rodzeństwa do AppBarLayout z app:layout_behavior.

Moje pytanie brzmi: w jakiej dokładności ViewGroup (a może View) powinniśmy umieścić to app:layout_behavior?


Dotychczas próbowałem z (A wszyscy oni pracował, a wszystkie one są rodzeństwem do AppBarLayout):

  • Przewijanie Zobacz

  • Pierwszy ViewGroup wewnątrz przewijanego widoku

  • ScrollView wewnątrz ViewGroup

A ten nie działa:

  • ViewGroup bez przewijalnych Zobacz dzieci.

Istnieje wiele przykładów w Internecie, ale żaden z nich naprawdę stwierdzić, gdzie należy go umieścić, jak:

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/

Odpowiedz

7

Sprawdź ten link:https://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

wymaga również oddzielnego przewijania rodzeństwa, aby wiedzieć, kiedy przewijać. Wiązanie odbywa się za pośrednictwem klasy AppBarLayout.ScrollingViewBehavior, co oznacza, że ​​należy ustawić zachowanie Twojego przewijanie widoku danych, by być instancjąAppBarLayout.ScrollingViewBehavior. Dostępny jest łańcuch znaków zawierający pełną nazwę klasy .

Wspomnieli o tym, powinien on być View które zostaną pokazane w ramach AppBarLayout tak:

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

Moje pytanie brzmi: w jaki dokładnie ViewGroup (lub może View) powinniśmy umieścić , że app:layout_behavior?

I w tym linku: http://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

Następnie musimy zdefiniować stowarzyszenie międzyAppBarLayout i pogląd, że będą przewijane. Dodaj obiekt app:layout_behavior do dowolnego innego widoku, który umożliwia przewijanie zagnieżdżone, na przykład NestedScrollView. Biblioteka wsparcie zawiera specjalny ciąg zasób @string/appbar_scrolling_view_behaviorktóry mapuje do AppBarLayout.ScrollingViewBehavior, który jest używany do powiadomić AppBarLayout podczas przewijania zdarzenia występują na tym konkretnym widoku. Zachowanie musi zostać ustalone w widoku, który wyzwala zdarzenie.

+1

"Widok zdolny do przewijania zagnieżdżonego" jest ważny, jak sądzę, jeśli wyłączysz nestedScrolling na recyclerView to nie działa –

+0

@Jemshit Iskenderov ma rację nigdy nie ustawia recyclerView.setNestedScrollingEnabled (false); po prostu korzystasz z recyklera po AppBarLayout lub twój widok recyklera nie znajduje się w NestedScrollView. –

2

app:layout_behavior powinny być ustawione na tych poglądów, które są bezpośrednim dzieckiem układ koordynator

+0

Czym właściwie jest układ koordynatora? pls nie mam nic przeciwko .., jestem trochę nowy dla Androida. – eRaisedToX

+0

@eRaisedToX Jest to tylko FrameLayout z dodatkowymi funkcjami. Sprawdź je na stronie https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html – Ranjit

0

Upewnij się, że dodane pole appbar_scrolling_view_behavior w 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> 

I jak każdy wie, że tylko mogą korzystać z tego jak poniżej

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

jej tylko dla informacji nie PO odpowiedź.

+0

Biblioteka wsparcia projektu już definiuje zasób ciągów . Nic nie zyskujesz, redefiniując go w swoich własnych zasobach. –

+0

Może masz rację. Zapomniałem, ale napotkałem problem i rozwiązałem go po dodaniu tego w string.xml. – Ranjit

Powiązane problemy