2015-12-03 2 views
2

В настоящее время заклинатель открывается, когда я выполняю салфетный жест из его местоположения, позволяя мне выбрать элемент, отпустив его.Spinner disable swipe to open

Я хотел бы отключить это, так как это мешает прокрутке в ScrollLayout и ViewPager. Прядильщик должен открывать только при любых обстоятельствах одним нажатием, а не с помощью каких-либо жестов.

+0

, пожалуйста, отправьте код в вопросе. –

+0

Не проверено, но scrollview имеет метод onGenericMotionEvent (MotionEvent e), который вы можете использовать, чтобы узнать, открывается ли Spinner или нет. Вы могли бы попробовать. – Fustigador

+0

@ inner_class7 Это простой счетчик, без дополнительного кода. – jacobz

ответ

1

У меня была эта проблема, и самым быстрым решением для меня было расширение Spinner на что-то вроде следующего. Идея состоит в том, чтобы просто подписаться и перехватить все события касания и передать их на GestureDetector, который может решить для вас, когда у вас есть кран - тогда вы можете активировать функцию щелчка в этой точке. Кажется, отлично работает 6.0.1.

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.widget.Spinner; 

/** 
* Version of the Spinner class which doesn't open the popup on swipe 
*/ 
public class SpinnerNoSwipe extends Spinner { 

    private GestureDetector mGestureDetector; 

    public SpinnerNoSwipe(Context context) { 
     super(context); 
     setup(); 
    } 

    public SpinnerNoSwipe(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setup(); 
    } 

    public SpinnerNoSwipe(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     setup(); 
    } 

    private void setup() { 
     mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onSingleTapUp(MotionEvent e) { 
       return performClick(); 
      } 
     }); 
    } 

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