Настраиваемое поведение координатора + вложенная прокрутка - PullRequest
0 голосов
/ 16 мая 2018

У меня есть следующий макет:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >

  <ui.home.navigation.NavigationView
      android:id="@+id/navigation_view"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="center_horizontal"
      android:orientation="horizontal"
      app:layout_behavior =".ui.behavior.NavigationViewBehavior"
      />

  <android.support.v4.view.ViewPager
      android:id="@+id/viewpager"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      />
</android.support.design.widget.CoordinatorLayout>

ViewPager содержит несколько фрагментов и имеет NestedScrollViews. Я хочу, чтобы высота NavigationView уменьшалась при прокрутке scrollView. Я уже добавил пользовательское поведение:

package ui.behavior

import android.content.Context
import android.support.design.widget.CoordinatorLayout
import android.support.v4.widget.NestedScrollView
import android.util.AttributeSet
import android.util.Log
import android.view.View

class NavigationViewBehavior(
  context: Context,
  attributeSet: AttributeSet
) : CoordinatorLayout.Behavior<NavigationView>(context, attributeSet) {

  override fun layoutDependsOn(
    parent: CoordinatorLayout?,
    child: NavigationView?,
    dependency: View?
  ): Boolean {
    Log.d("Behavior", "Dependency = ${dependency.toString()}")
    return dependency is NestedScrollView
  }

  override fun onDependentViewChanged(
    parent: CoordinatorLayout?,
    child: NavigationView?,
    dependency: View?
  ): Boolean {
    if (child is NavigationView && dependency is NestedScrollView) {
      // Adjust navigation view according to scroll Y value
    }
    return false
  }
}

Но onDependentViewChanged никогда не запускается, потому что только ViewPager передается layoutDependsOn.

Как мне реагировать на события прокрутки вложенных просмотров прокрутки?

...