2

У меня есть CoordinatorLayout и следующие элементы внутри него:Как программно прокручивать NestedScrollView внутри CoordinatorLayout?

  1. AppBarLayout с сворачиваемой панели инструментов;
  2. NestedScrollView с некоторым содержанием

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

Я попробовал такой код:

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); 
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); 
if (behavior != null) { 
    behavior.onNestedPreScroll(coordinatorLayout, appBarLayout, nestedScrollView, 0, 1000, new int[2]); 
} 

Но это просто прокручивается вверх и разрушается расположение AppBar сам и NestedScrollView остается на своем месте.

Итак, вопрос заключается в том, как прокрутить NestedScrollView и свернуть Collapsable Toolbar, чтобы свернуть?

Я знаю, что проблема связана с поведением координатора Layout, но я не могу понять, что пропущено.

Вот точное расположение:

<android.support.design.widget.CoordinatorLayout 
android:id="@+id/event_coordinator_layout" 
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.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <!-- some content --> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/quick_return_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin"> 

     </android.support.v7.widget.Toolbar> 

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

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

<android.support.v4.widget.NestedScrollView 
    android:id="@+id/nested_scroll_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <!-- some content --> 

</android.support.v4.widget.NestedScrollView> 

ответ

2

CollapsingToolbarLayout свернут база на AppBarLayout offseting вершины и дно ее детей. Вы правильно относитесь к нему с помощью метода вложенной предварительной прокрутки. NestedScrollView необходимо прокрутить на ту же сумму:

 int targetScroll = mNestedScrollView.getScrollY() + 1000; 
     mNestedScrollView.scrollTo(0,targetScroll); 
     mNestedScrollView.setSmoothScrollingEnabled(true); 
     ViewCompat.setNestedScrollingEnabled(mNestedScrollView, false); 
     final int currentScrollY = mNestedScrollView.getScrollY(); 
     ViewCompat.postOnAnimationDelayed(mNestedScrollView, new Runnable() { 
      int currentY = currentScrollY; 
      @Override 
      public void run() { 
       if(currentScrollY == mNestedScrollView.getScrollY()){ 
        ViewCompat.setNestedScrollingEnabled(mNestedScrollView, true); 
        return; 
       } 
       currentY = mNestedScrollView.getScrollY(); 
       ViewCompat.postOnAnimation(mNestedScrollView, this); 
      } 
     }, 10); 
Смежные вопросы