【问题标题】:how can we increase button long click listener time in android?我们如何在android中增加按钮长按监听时间?
【发布时间】:2018-06-14 06:28:01
【问题描述】:

我想在同一个按钮上执行简单的点击监听器以及长按监听器。但是我需要在 5 秒延迟后执行长点击监听器 在 longclicklistener 中执行 1 秒后执行。所以使用处理程序它将在 5 秒后执行。但我需要准确地按下按钮 5 秒然后代码执行...

【问题讨论】:

  • 你做了什么分享代码
  • 这是我的代码

标签: android android-studio android-button


【解决方案1】:

你可以像这样使用Handler:

Button b=findViewById(R.id.btn);

    final Runnable run = new Runnable() {

        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT).show();
            // Your code to run on long click

        }
    };
    final Handler handel = new Handler();
    b.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            switch (arg1.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    handel.postDelayed(run, 5000/* OR the amount of time you want */);
                    break;

                default:
                    handel.removeCallbacks(run);
                    break;

            }
            return true;
        }
    });

【讨论】:

  • 你需要按下按钮 5 秒,然后你会显示吐司,这对我有用
  • 嘿删除 img_one.setOnClickLick 和 img_one.setOnLongClickListener
  • 只将单个 setOnTouchListener 放入代码中删除其他 Listener 并检查它
  • 我没有使用 img_one.setOnClickLick 和 img_one.setOnLongClickListener
  • 检查名称在上面 -> AD10 代码的更新代码在该名称下方
【解决方案2】:

onLongClick 事件无法更改定时器,由android自己管理。

可以使用 .setOnTouchListener()。

然后在 MotionEvent 为 ACTION_DOWN 时注册。 注意变量中的当前时间。 然后当一个带有 ACTION_UP 的 MotionEvent 被注册并且 current_time - actionDown 时间 > 5000 ms 然后做一些事情。

差不多:

Button button = new Button();
long then = 0;
    button.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                then = (Long) System.currentTimeMillis();
            }
            else if(event.getAction() == MotionEvent.ACTION_UP){
                if(((Long) System.currentTimeMillis() - then) > 5000){
                    // 5 second of long click
                    return true;
                }
            }
            return false;
        }
    })

【讨论】:

  • 我也试过了,但我想要按钮继续按下 5 秒然后代码执行时的结果。不是当按钮 Action Up 时
猜你喜欢
  • 1970-01-01
  • 2012-03-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多