默认的微调器行为是当它“关闭”时,长按它会“打开”它并显示下拉 View 。我发现这种行为对用户来说可能是非常有问题的。例如,如果他们试图在屏幕上滚动某些东西,并且碰巧“捕获”了一个有微调器的地方,那么它不会滚动,而是会在一秒钟左右后打开下拉 View ,并且用户是基本上他们的手指停留在其中一个下拉选项上(他们现在可能会不小心按下)。
因此,我想禁用长按行为,并在仅单击而不是长按时让微调器“打开”。这可能吗?
最佳答案
如果您只需要恢复标准的点击行为,这是一个更简单、更紧凑的 Jordi's answer 版本:
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
v.performClick();
}
return true;
}
});
进一步思考
这种行为也让我很恼火。经过调查,它似乎有一个名字:拖动打开。您可以在 AppCompatSpinner#onTouchEvent()
的源代码中查看它是如何定义的方法。
我看到这种强制行为的一些问题(以及一些人想要禁用它的原因):
- 它允许用户在微调器中选择禁用的值。通过长按、拖动和释放,您可以选择甚至无法通过正常交互(点击打开 + 点击选择)选择的值
- 作为 #1 的结果,它还可以很容易地使 Espresso 测试失败。事实上,在 Espresso 中,点击的持续时间相当不稳定,一次点击可以很快变成长按和选择交互。
- 最后,这里最大的问题是没有方法/XML 属性来禁用“拖动打开”行为...
让我们修复它!
我已经在 AOSP 问题跟踪器上打开了与此相关的票证:#228953 .请随时关注它,或者如果我遗漏了什么,请发表评论。
关于android - 在 Android 上,有什么方法可以禁用 Spinner 的长按行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27923266/