Я пытаюсь воспроизвести способ, которым приложение "Контакты" версии 5.0 сворачивает панель инструментов при прокрутке списка.
Галерея скриншотов, демонстрирующих желаемое взаимодействие Обратите внимание на крах панели инструментов поэтапно, где он отображает поиск + последний контакт, исчезает последний контакт, сворачивает последний контакт, сворачивает поиск, оставляя только вкладки.
До сих пор у меня есть панель инструментов, расположенная над recyclerview в LinearLayout, и панель инструментов используется как панель действий, а не отдельная.
Я не могу понять, как перехватить событие touch на recyclerview и заставить его сжимать панель инструментов, а затем вернуть событие прокрутки в recyclerview. Я попытался поместить все это в scrollview, но затем recyclerview не смог правильно рассчитать высоту и не отобразить содержимое. Я попробовал переопределить onscroll на recyclerview и обнаружил, что он только уведомит меня о начале прокрутки и предоставит мне первый видимый идентификатор карты.
Как это выглядит правильно, но я не могу работать для жизни меня, это:
getSupportActionBar().setHideOnContentScrollEnabled(true);
Что возвращает:
Caused by: java.lang.UnsupportedOperationException: Hide on content scroll is not supported in this action bar configuration.
Использование традиционной панели действий, установка под ней панели инструментов и установка hideoncontentscrollenabled также не работали, прокрутка никогда не вызывала метод hide на панели действий.
- изменить - Мне удалось заставить hideOnContentScrollEnabled работать с списком с помощью традиционного экрана действий, но поведение не совпадает с поведением контактов. Это явно не метод, который они использовали - он просто запускает .hide() на панели действий, когда событие перелета происходит в списке, что заметно отличается от приложения-контакта, которое перетаскивает панель инструментов вместе со случаем прокрутки. -/edit -
Итак, я отказался от этого маршрута и поместил fill_parent на высоту карты и анимировал крах на панели инструментов. Но как я могу вызвать его так, чтобы он следовал за событием touch, а затем возвратил событие touch в recyclerview?
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/actionBarSize"
android:background="@color/colorPrimary"
/>
<fragment android:name="me.myapplication.FragmentTab"
android:id="@+id/tab_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
fragment_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="8dp"
android:background="#eeeeee"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
styles.xml
...
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
MainActivity.java
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
// Disable the logo in the actionbar, as per material guidelines
toolbar.getMenu().clear();
toolbar.setTitle("My toolbar");
setSupportActionBar(toolbar);