Как обнаружить жесты на кнопках внутри Dialog в Android

Я попытался расширить класс GestureDetector.SimpleOnGestureListener для обнаружения жестов на Dialog, у меня это сработало, но он не обнаруживает события одиночного нажатия, нажатия вниз, прокрутки и т. д. на любой кнопке, флажке, переключателе в диалоговом окне, он обнаруживает только эти события при касании белой области внутри диалогового окна. Кто-нибудь знает, как я могу определить жесты на различных кнопках и других элементах управления в диалоговом окне?

Вот фрагмент кода моего диалога и прослушивателя жестов:

public class SimpleDialog extends Dialog {

    private GestureDetector gestureDetector;

    public SimpleDialog(Context context) {
        super(context);
        gestureDetector = new GestureDetector(context, new MyGestureDetector());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog_simple);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }

    private class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            System.out.println( "touch event onFling()");
            return false;
        }

        MyGestureDetector() {
            super();
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            System.out.print("touch event onSingleTapUp()");
            return super.onSingleTapUp(e);
        }

        @Override
        public void onLongPress(MotionEvent e) {
            super.onLongPress(e);
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            System.out.println("touch event onScroll()");
            return super.onScroll(e1, e2, distanceX, distanceY);
        }

        @Override
        public void onShowPress(MotionEvent e) {
            super.onShowPress(e);
        }

        @Override
        public boolean onDown(MotionEvent e) {
            System.out.println("touch event onDown()");
            return true;
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            return super.onDoubleTap(e);
        }

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            return super.onDoubleTapEvent(e);
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            return super.onSingleTapConfirmed(e);
        }

        @Override
        public boolean onContextClick(MotionEvent e) {
            return super.onContextClick(e);
        }
    }
}

person zeeshanali    schedule 08.03.2017    source источник
comment
Этот пост может быть полезен: stackoverflow.com/questions/7848269 /   -  person Sagar Das    schedule 08.03.2017
comment
@SagarDas Я уже пробовал это, это не сработало.   -  person zeeshanali    schedule 09.03.2017