【问题标题】:How to disable double tap on spinner in android?如何在android中禁用双击微调器?
【发布时间】:2016-08-05 20:45:48
【问题描述】:

双击微调器显示 2 个菜单。如何禁用双击?

尝试添加TouchListeners如下图

private static final int CLICK_DELAY = 500;
private long lastMenuClickTime = 0;

actionsSpinner.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
          if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (SystemClock.elapsedRealtime() - lastMenuClickTime > CLICK_DELAY) {
              lastMenuClickTime = SystemClock.elapsedRealtime();

              return false;
            }
          }
          return true;
        }
      });

但这会在执行点击操作时增加一些延迟,主要问题是即使在 CLICK_DELAY 不起作用之后首次点击。

【问题讨论】:

    标签: android spinner android-spinner double-click


    【解决方案1】:

    你可以这样做

     public static void disableTouch(final View v, long timeInMiliSec) {
            v.setEnabled(false);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    v.setEnabled(true);
                }
            }, timeInMiliSec);
        }
    

    此功能在指定时间内禁用视图

    示例:

    actionsSpinner.setOnTouchListener(new View.OnTouchListener() {
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
          if (event.getAction() == MotionEvent.ACTION_DOWN) {
              disableTouch(actionsSpinner, CLICK_DELAY)
              //do your other stuff here 
    
              return false;
            }
          return true;
        }
      });
    

    【讨论】:

    • 我们无法将 onClickListener 添加到微调器(它不是按钮),因此我无法在单击微调器时挂钩 disableTouch()!
    • 已编辑答案,对不起,这是错误的,您可以传递任何参数来运行,只要它的视图。只需在您的onTouch() 中调用disableTouch()
    • 关键是什么时候调用disableTouch()?如果我们在创建微调器之后调用它,则在创建微调器后的 CLICK_DELAY 时间之后将没有用处。你不能用 onClickListener 调用它,因为 spinner 不支持它!
    • 再次编辑答案。我没有让你设置onClickedListener
    • 非常感谢@N J。但由于某种原因,它不会引发点击事件,我必须手动添加它,如 v.performClick();代替//在这里做你的其他事情。但这将无法处理从微调器打开的菜单的方向(方向更改后菜单消失。在默认情况下,方向工作正常。)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多