Где должно быть установлено приложение: layout_behavior?

Должен ли он быть установлен в родительском браке AppBarLayout или в первом прокручиваемом представлении внутри своего родного брата?


С Material Design для Android есть Views, которые позволяют нам работать с поведением макета в зависимости от его окружения, одним из них является CoordinatorLayout, поскольку в этом руководстве CodePath упоминается:

CoordinatorLayout расширяет возможности выполнения многих прокручивающих эффектов Google Material Design. В настоящее время в этой структуре предусмотрено несколько способов, которые позволяют работать без необходимости писать собственный код анимации.

Теперь меня интересует следующее:

  • Расширение или сокращение панели инструментов или пространства заголовка, чтобы освободить место для основного содержимого.

Таким образом, мы будем использовать AppBarLayout с панелью инструментов с app:layout_scrollFlags набор и другой ViewGroup родственный к AppBarLayout с app:layout_behavior.

Мой вопрос: в какой точной ViewGroup (или, возможно, в представлении) мы должны поместить это app:layout_behavior?


До сих пор я пытался (И они все работали, и все они являются братьями и сестрами в AppBarLayout):

  • Просмотр прокрутки

  • Первая группа просмотра в прокручиваемом виде

  • ScrollView внутри группы ViewGroup

И этот не сработал:

  • ViewGroup без прокручиваемого просмотра.

В Интернете есть несколько примеров, но ни один из них не говорит о том, куда его следует поместить, например:

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/

Ответ 1

Проверьте эту ссылку: https://developer.android.com/reference/android/support/design/widget/AppBarLayout.html.

AppBarLayout также требует отдельного скроллинга, чтобы узнать, когда прокручивать. Связывание выполняется с помощью класса AppBarLayout.ScrollingViewBehavior, что означает, что вы должны настроить поведение прокрутки как экземпляр AppBarLayout.ScrollingViewBehavior. Доступен строковый ресурс, содержащий полное имя класса.

Они упомянули об этом, это должен быть View который будет показан в AppBarLayout следующим образом:

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

Мой вопрос: в какой точной ViewGroup (или, возможно, в View) мы должны поместить это app:layout_behavior?

И в этой ссылке: http://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

Затем нам нужно определить связь между AppBarLayout и View, которая будет прокручиваться. Добавьте app:layout_behavior в RecyclerView или любой другой вид, способный NestedScrollView прокрутку, такую как NestedScrollView. Библиотека поддержки содержит специальный строковый ресурс @string/appbar_scrolling_view_behavior который сопоставляется с AppBarLayout.ScrollingViewBehavior, который используется для уведомления AppBarLayout когда события прокрутки происходят на этом конкретном представлении. Поведение должно быть установлено в представлении, которое вызывает событие.

Ответ 2

Убедитесь, что вы добавили поле appbar_scrolling_view_behavior в свой 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>

И, как всем известно, мы просто можем использовать это, как показано ниже

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

Его просто для информации нет ответа OP.

Ответ 3

app:layout_behavior следует установить для тех представлений, которые являются прямым дочерним положением координатора

Ответ 4

Мне пришлось добавить следующее в файл gradle, иначе это дало мне ошибку компиляции.

implementation 'com.google.android.material:material:1.0.0'

Надеюсь, это поможет и другим!