2016-06-10 114 views
4

我需要底部工作表停在两个位置。底部工作表有以下代码。底部工作表Android滚动问题

<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:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    .... 
</RelativeLayout> 

<FrameLayout 
    android:id="@+id/bottom_sheet" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> 
     <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/white" 
       android:minHeight="1000dp" 
       android:orientation="vertical"> 
       .... 
      </LinearLayout> 
     </ScrollView> 
</FrameLayout> 

View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet); 
    final BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); 
    behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
     @Override 
     public void onStateChanged(@NonNull View bottomSheet, int newState) { 
      // React to state change 
      Log.e("onStateChanged", "onStateChanged:" + newState); 
      if (newState == BottomSheetBehavior.STATE_EXPANDED) { 
       behavior.setPeekHeight(600); 
       showAgain.setVisibility(View.GONE); 
       mMap.getUiSettings().setScrollGesturesEnabled(false); 
      } else if (newState == BottomSheetBehavior.STATE_COLLAPSED) { 

       if (behavior.getPeekHeight() == 600) { 
        behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
        behavior.setPeekHeight(80); 
        mMap.getUiSettings().setScrollGesturesEnabled(false); 
       } else if (behavior.getPeekHeight() == 80) { 
        showAgain.setVisibility(View.VISIBLE); 
        mMap.getUiSettings().setScrollGesturesEnabled(true); 
       } 

      } 
     } 

     @Override 
     public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
      // React to dragging events 
      Log.e("onSlide", "onSlide " + slideOffset); 
     } 
    }); 

    behavior.setPeekHeight(600); 

此代码,除了一件事工作正常。我第一次必须向上滚动底部表单,然后才能向下滚动。我无法直接向下滚动工作表。

任何帮助将不胜感激。

回答

3

而是采用滚动视图可以使用NestedScrollView 更好地符合CoordinatorLayout工作 确保后

将这个使用app:layout_behavior =“@ string/appbar_scrolling_view_behavior”的内部NestedScrollView

mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
     @Override 
     public void onStateChanged(@NonNull View bottomSheet, int newState) { 
      if (newState == BottomSheetBehavior.STATE_COLLAPSED) { 
       mBottomSheetBehavior.setPeekHeight(0); 
      } 
     } 

     @Override 
     public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
     } 
    }); 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btn_negetive: { 
      mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
      mBottomSheetBehavior.setPeekHeight(Constants.PEEK_HEIGHT); 
      mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
      break; 
     } 
     case R.id.btn_positive: { 
      //some code 
     } 
    } 
} 

上述溶液中使用此链接为我工作的内容平滑滚动: https://code.tutsplus.com/articles/how-to-use-bottom-sheets-with-the-design-support-library--cms-26031

+0

对我NestedScrollView更换滚动型的伎俩,谢谢 –

1

尝试设置:

app:behavior_hideable="true" 
在XML文件中,并在您的活动

添加类似:

else if (newState == BottomSheetBehavior.STATE_HIDDEN{ 
    mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
    mBottomSheetBehavior.setPeekHeight(80); } 

这将允许被拉到你的底片对话框下立即如果您想。

0

试试这个, 希望这将有助于initilizing意见

ViewCompat.postOnAnimation(coordinatorLayout, new Runnable() { 
      @Override 
      public void run() { 
       ViewCompat.postInvalidateOnAnimation(coordinatorLayout); 
      } 
     });