Прокрутите второго дочернего элемента в AppBarLayout

Я пытаюсь получить этот эффект, когда, если пользователь прокручивает RecyclerView, определенный макет прокручивается вверх вместе с переработчиком и исчезает за Toolbar.

Подобное поведение можно было бы получить с помощью CoordinatorLayout, это было бы возможно, установив

app:layout_behavior="@string/appbar_scrolling_view_behavior"

на указанном Recycler и делает

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

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_scrollFlags="scroll|enterAlways"/>

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

Кроме того, если я помещу второй дочерний элемент внутри AppBarLayout и установлю для него app:layout_scrollFlags, полученный эффект будет таким же, с прокруткой обоих макетов вместе с Recycler.

Чего я пытаюсь добиться, так это зафиксировать первый дочерний элемент (панель инструментов) в фиксированном положении и позволить второму дочернему элементу (a LinearLayout) прокручиваться и прятаться за панелью инструментов. К сожалению, я не мог добраться до этого поведения.

Возможно ли это без использования 3-й библиотеки частей? Заранее спасибо и извините за мой английский.


person Matteo    schedule 13.01.2016    source источник
comment
Я добавляю комментарий здесь для справки, поскольку на самом деле это не ответ на вопрос, а скорее обходной путь: простым решением было бы установить второй дочерний элемент нашего макета в качестве заголовка для RecyclerView и просто закрепите панель инструментов сверху. Это звучит хорошо для меня, но это может привести к небольшой хитрости, если мы хотим обновить заголовок.   -  person Matteo    schedule 07.11.2016


Ответы (1)


Наконец, я нашел способ добиться такого поведения, включив CoordinatorLayout в LinearLayout и сделав второй дочерний элемент (LinearLayout) первым, переместив панель инструментов на внешний (корневой) уровень.

Иерархия до:

<CoordinatorLayout>
 <AppBarLayout>
  <ToolBar>
  <LinerarLayout>

Иерархия после:

<LinearLayout>
  <ToolBar>
  <CoordinatorLayout>
   <AppBarLayout>
     <LinearLayout>

Пример:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        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:orientation="vertical">
        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="48dp" />
        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <com.google.android.material.appbar.AppBarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:elevation="16dp">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorSecondaryLight"
                    android:orientation="vertical"
                    app:layout_scrollFlags="scroll"/>
                </com.google.android.material.appbar.AppBarLayout>
                .
                .
                .
                .
            </androidx.coordinatorlayout.widget.CoordinatorLayout>
    </LinearLayout>

Надеюсь, это поможет!

person Moh'd Hawamdeh    schedule 20.11.2018