2016-10-24 6 views
4

内の複数行のテキストのEditText私はボトムシートダイアログを持ち、レイアウトでのEditTextが存在します。 EditTextは、複数行で最大ラインは3です。私は入れ:アンドロイド:BottomSheetDialog

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

が、ときに、ユーザーが垂直BottomSheetBehaviorインターセプトイベントをのEditTextのテキストをスクロールが開始されますとのEditTextが垂直方向にスクロールしませんが。

enter image description here

誰もこの問題を解決する方法を知っていますか?

+0

alertdialogまたはpopupwindowを使用してこのダイアログをどのように作成しましたか? – Jai

+0

いいえ、これはあなたがonDispatchTouchEventを使用して、フロントダイアログシートにタッチイベントを渡す必要があり、あなたがこの問題を解決することができ、その場合にはBottomSheetBehavior –

+0

と私のカスタムレイアウトは簡単です!あなたはあなたの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. は、ネイティブの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. その後、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

関連する問題