2016-10-24 3 views
4

У меня есть диалог нижнего листа и существует EditText в макете. EditText многострочное, не более линий 3. Я ставлю:Android: многострочный текст EditText внутри BottomSheetDialog

commentET.setMovementMethod(new ScrollingMovementMethod()); 
commentET.setScroller(new Scroller(bottomSheetBlock.getContext())); 
commentET.setVerticalScrollBarEnabled(true); 

но когда пользователь начнет прокрутку текста EditText вертикально BottomSheetBehavior перехватывать событие и EditText не будет перемещаться по вертикали.

enter image description here

Кто-нибудь знает, как решить эту проблему?

+0

Как вы создали этот диалог с помощью alertdialog или popupwindow? – Jai

+0

нет, это простой мой пользовательский макет с BottomSheetBehavior –

+0

В этом случае вам нужно передать событие касания в свой передний диалоги с помощью onDispatchTouchEvent, и вы можете решить эту проблему! Вы получаете такую ​​проблему, потому что у вас есть что-то с вашим BottomSheet, который становится сфокусированным. – Jai

ответ

3

Это простой способ сделать это.

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; 
    } 
}); 
1

я решить эти проблемы с следующим образом:

  1. Я создал пользовательскую работу вокруг нижнего поведения листа распространяется родным андроид 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. затем Настр.сенс.экр события EditText и когда пользователь трогательный область EditText Я буду отключать обработку события родителем с помощью метода вызова 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

Как вы использовали пользовательское поведение? – HenBoy331

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