Android 在文本视图上应用双击不起作用

Android 在文本视图上应用双击不起作用,android,textview,double,Android,Textview,Double,我想在双击TextView时触发某些事件 final GestureDetector gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() { public boolean onDoubleTap(MotionEvent e) { Log.e("", "Open new activty here"); return true;

我想在双击TextView时触发某些事件

final GestureDetector gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() {
    public boolean onDoubleTap(MotionEvent e) {
        Log.e("", "Open new activty here");
        return true;
    }
});
TextView tv = (TextView) findViewById(R.id.editTextID);
tv.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
});

这将返回ontapevent

我认为您需要实现它,请使用以下代码:

final GestureDetector gd = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
   //here is the method for double tap
    @Override
    public boolean onDoubleTap(MotionEvent e) {

        //your action here for double tap e.g.
        //Log.d("OnDoubleTapListener", "onDoubleTap");

        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        super.onLongPress(e);

    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }


});

//here yourView is the View on which you want to set the double tap action

yourView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        return gd.onTouchEvent(event);
    }
});
虽然说在安卓系统中使用longclick更为常见


希望它有帮助

我认为您需要实现它,请使用以下代码:

final GestureDetector gd = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
   //here is the method for double tap
    @Override
    public boolean onDoubleTap(MotionEvent e) {

        //your action here for double tap e.g.
        //Log.d("OnDoubleTapListener", "onDoubleTap");

        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        super.onLongPress(e);

    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }


});

//here yourView is the View on which you want to set the double tap action

yourView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        return gd.onTouchEvent(event);
    }
});
虽然说在安卓系统中使用longclick更为常见


希望对您有所帮助

您可能需要创建新的类实现Onclick。正常点击将延迟400毫秒,直到使用定时器检测到第二次点击。如果不存在400毫秒后的第二次点击,它将考虑一个TAP

public abstract class DoubleClickListener implements OnClickListener {

    private Timer timer = null;  //at class level;
    private int DELAY   = 400;

    private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds

    long lastClickTime = 0;

    @Override
    public void onClick(View v) {
        long clickTime = System.currentTimeMillis();
        if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
            processDoubleClickEvent(v);
        } else {
            processSingleClickEvent(v);
        }
        lastClickTime = clickTime;
    }



    public void processSingleClickEvent(final View v){

       final Handler handler=new Handler();
       final Runnable mRunnable=new Runnable(){
            public void run(){
                onSingleClick(v); //Do what ever u want on single click
            }
       };

       TimerTask timertask=new TimerTask(){
            @Override
            public void run(){
                    handler.post(mRunnable);
            }
       };
       timer=new Timer();
       timer.schedule(timertask,DELAY);
    }


    public void processDoubleClickEvent(View v){
        if(timer!=null)
        {
             timer.cancel(); //Cancels Running Tasks or Waiting Tasks.
             timer.purge();  //Frees Memory by erasing cancelled Tasks.
        }

        onDoubleClick(v);//Do what ever u want on Double Click
    }

    public abstract void onSingleClick(View v);

    public abstract void onDoubleClick(View v);
}

您可能需要创建新的类实现Onclick。正常点击将延迟400毫秒,直到使用定时器检测到第二次点击。如果不存在400毫秒后的第二次点击,它将考虑一个TAP

public abstract class DoubleClickListener implements OnClickListener {

    private Timer timer = null;  //at class level;
    private int DELAY   = 400;

    private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds

    long lastClickTime = 0;

    @Override
    public void onClick(View v) {
        long clickTime = System.currentTimeMillis();
        if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
            processDoubleClickEvent(v);
        } else {
            processSingleClickEvent(v);
        }
        lastClickTime = clickTime;
    }



    public void processSingleClickEvent(final View v){

       final Handler handler=new Handler();
       final Runnable mRunnable=new Runnable(){
            public void run(){
                onSingleClick(v); //Do what ever u want on single click
            }
       };

       TimerTask timertask=new TimerTask(){
            @Override
            public void run(){
                    handler.post(mRunnable);
            }
       };
       timer=new Timer();
       timer.schedule(timertask,DELAY);
    }


    public void processDoubleClickEvent(View v){
        if(timer!=null)
        {
             timer.cancel(); //Cancels Running Tasks or Waiting Tasks.
             timer.purge();  //Frees Memory by erasing cancelled Tasks.
        }

        onDoubleClick(v);//Do what ever u want on Double Click
    }

    public abstract void onSingleClick(View v);

    public abstract void onDoubleClick(View v);
}

一个懒惰的实现

private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds

long lastClickTime = 0;

TextView tv = (TextView) findViewById(R.id.editTextID);
tv.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        long clickTime = System.currentTimeMillis();
    if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
        lastClickTime = 0;
        //double click
    } else {
        //single click
    }
    lastClickTime = clickTime;
    }
});

快乐编码是懒惰的实现之一

private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds

long lastClickTime = 0;

TextView tv = (TextView) findViewById(R.id.editTextID);
tv.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        long clickTime = System.currentTimeMillis();
    if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
        lastClickTime = 0;
        //double click
    } else {
        //single click
    }
    lastClickTime = clickTime;
    }
});

快乐编码

可能重复可能重复不起作用。双击会发生什么?[1] 点击一下就进来了。。。没有以前的。。。因此该方法被调用。[2] 然后第二次点击进来。。。但一切都已明朗。请看下面。不起作用。双击会发生什么?[1] 点击一下就进来了。。。没有以前的。。。因此该方法被调用。[2] 然后第二次点击进来。。。但一切都已明朗。请看下面。很好的解决方案,很有效。也许有点重,但足够了。天哪!很好的解决方案,很有效。也许有点重,但足够了。天哪!