2017-02-09 72 views
2

我想要禁用通過觸摸滾動摺疊工具欄的行爲。如果由RecyclerView(正在工作)觸發,它應該只會崩潰。我想爲什麼不只是禁用焦點... android:focusableInTouchMode="false" 但它不工作。我可以改變layout_scrollFlags,但然後... 因此,我的問題是,有一個簡單的解決方案嗎?摺疊工具欄 - 通過觸摸禁用滾動

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

編輯: 如果你想確保,正確的滾動狀態設置,使用通知/事件(不定時更新),列表初始化後(視圖更新)。否則,它可能會錯誤地設置滾動標誌。