Android : Multi line text EditText inside BottomSheetDialog

后端 未结 3 446
名媛妹妹
名媛妹妹 2021-01-02 10:33

I have a bottom sheet dialog and exists EditText in layout. EditText is multiline, max lines is 3. I put :

commentET.setMovementMethod(new ScrollingMovementM         


        
相关标签:
3条回答
  • 2021-01-02 10:36

    I solve this issues with following way:

    1. 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);
      }
      }
      
    2. then set touch event of EditText and when user touching area of EditText I will be disable handling event by parent with calling method setAllowUserDragging :

      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;
      }
      });
      
    0 讨论(0)
  • 2021-01-02 10:40

    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
    }
    
    0 讨论(0)
  • 2021-01-02 10:51

    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;
       }
    });
    
    0 讨论(0)
提交回复
热议问题