微调器禁用滑动打开
Spinner disable swipe to open
目前,当我从它的位置执行滑动手势时,一个微调器会打开,允许我通过释放来 select 一个项目。
我想禁用它,因为它会干扰 ScrollLayout 和 ViewPager 中的滚动。微调器在任何情况下都只能通过单击打开,而不是通过任何手势打开。
我遇到了这个问题,对我来说最快的解决方法是将 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;
}
}
目前,当我从它的位置执行滑动手势时,一个微调器会打开,允许我通过释放来 select 一个项目。
我想禁用它,因为它会干扰 ScrollLayout 和 ViewPager 中的滚动。微调器在任何情况下都只能通过单击打开,而不是通过任何手势打开。
我遇到了这个问题,对我来说最快的解决方法是将 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;
}
}