问题
I have a bottom sheet dialog and exists EditText in layout. EditText is multiline, max lines is 3. I put :
commentET.setMovementMethod(new ScrollingMovementMethod());
commentET.setScroller(new Scroller(bottomSheetBlock.getContext()));
commentET.setVerticalScrollBarEnabled(true);
but when user will begin scrolling text of EditText vertically BottomSheetBehavior intercept event and EditText will not scroll vertically.
Anybody know how to solve this problem?
回答1:
Here is an easy way to do it.
yourEditTextInsideBottomSheet.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_UP:
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
回答2:
I solve this issues with following way:
I created custom work around bottom sheet behavior extends native android
BottomSheetBehavior
:public class WABottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> { private boolean mAllowUserDragging = true; public WABottomSheetBehavior() { super(); } public WABottomSheetBehavior(Context context, AttributeSet attrs) { super(context, attrs); } public void setAllowUserDragging(boolean allowUserDragging) { mAllowUserDragging = allowUserDragging; } @Override public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { if (!mAllowUserDragging) { return false; } return super.onInterceptTouchEvent(parent, child, event); } }
then set touch event of
EditText
and when user touching area ofEditText
I will be disable handling event by parent with calling methodsetAllowUserDragging
:commentET.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (v.getId() == R.id.commentET) { botSheetBehavior.setAllowUserDragging(false); return false; } return true; } });
回答3:
For those who are interested in Kotlin solution. Here it is
editText.setOnTouchListener { v, event ->
v.parent.requestDisallowInterceptTouchEvent(true)
when (event.action and MotionEvent.ACTION_MASK) {
MotionEvent.ACTION_UP ->
v.parent.requestDisallowInterceptTouchEvent(false)
}
false
}
来源:https://stackoverflow.com/questions/40218778/android-multi-line-text-edittext-inside-bottomsheetdialog