2

Я хочу, чтобы отключить прокрутку прикосновением поведение для сворачивающейся панели инструментов. Он должен свертываться только при срабатывании RecyclerView (который работает). Я подумал, почему не просто отключить фокус ... android:focusableInTouchMode="false" но он не работает. Я мог бы изменить layout_scrollFlags, но потом ... Мой вопрос, поэтому, есть ли простое решение для этого?Collapsing Toolbar - отключить прокрутку прикосновением

XML:

<android.support.design.widget.CoordinatorLayout 
    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" 
    tools:context=".MainActivity"> 

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

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/mCollapsingToolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="@dimen/header_size" 
      android:fitsSystemWindows="true" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <ImageView 
       ... 
       app:layout_collapseMode="parallax"/> 

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

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

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

    <android.support.v7.widget.RecyclerView 
     ... 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

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

ответ

3

Найдено рабочее решение здесь: https://stackoverflow.com/a/35465719/2033223. Итак, теперь он прокручивается, если в recyclerView достаточно элементов.

XML:

<android.support.design.widget.CollapsingToolbarLayout 
    android:id="@+id/mCollapsingToolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="@dimen/header_size" 
    android:fitsSystemWindows="true" 
    app:scrimAnimationDuration="300" 
    app:contentScrim="?attr/colorPrimary"> 

активность:

public class MainActivity extends AppCompatActivity { 

    private CollapsingToolbarLayout collapsingToolbarLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     collapsingToolbarLayout = 
       (CollapsingToolbarLayout) findViewById(R.id.mCollapsingToolbar); 

     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       if (rv.canScrollVertically(DOWN) || rv.canScrollVertically(UP)) { 
        controller.enableScroll(); 
       } else { 
        controller.disableScroll(); 
       } 
      } 
     }, 100); 
    } 

    private void enableScroll() { 
     final AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) 
            collapsingToolbarLayout.getLayoutParams(); 
     params.setScrollFlags(
       AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL 
       | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED 
     ); 
     collapsingToolbarLayout.setLayoutParams(params); 
    } 

    private void disableScroll() { 
     final AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) 
            collapsingToolbarLayout.getLayoutParams(); 
     params.setScrollFlags(0); 
     collapsingToolbarLayout.setLayoutParams(params); 
    } 
} 

PS: findLastCompletelyVisibleItemPosition() не было достаточно для моего случая. Но я тоже использую его. (Проверьте ссылку ниже) https://stackoverflow.com/a/31460285/2033223

EDIT: Если вы хотите, чтобы убедиться, что состояние правильно прокрутки установлено, используйте уведомления/события (не приуроченная обновления), после того, как список инициализации (точка зрения обновлено). В противном случае он может неправильно установить флажки прокрутки.

Смежные вопросы