设置BOTH,android:onClick和OnTouchListener

use*_*301 3 android button

嘿家伙,我有一个问题!你能告诉我是否以及如何在同一个按钮上设置一个android:onClick方法和一个OnTouchListener?我真的需要这个我的应用程序.

我知道它们的不同之处并且只使用android:onClick或OnTouchListener确实有效.一旦我尝试两者,只需OnTouchListener工作.

我需要这个用于不同布局的不同功能..

谢谢你的帮助

只是为了更好地理解.使用android:onClick我的意思是你在xml文件中分配这个按钮的方法,比如android:onClick ="InitMethod"

Adi*_*Adi 9

是的,你可以在同一个按钮上同时使用onClick和onTouch,但OnTouch回调你将获得像ACTION_MOVE,ACTION_UP,ACTION_DOWN等的motionEvent,不要忘记在onTouch回调中返回false(详细信息).请参考以下代码

Button button = (Button) findViewById(R.id.button);
        button.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                Log.d("test", "ontouch");
                return false;
            }
        });
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Log.d("test", "onclick");
            }

        });
Run Code Online (Sandbox Code Playgroud)

只需分别在回调onTouch和onClick中执行您想要执行的操作.请单击是用户按下按钮并释放时执行的操作,但用户按下时将触摸.

因此,只需单击一下,日志就会像这样.1.ACTION_DOWN,2.ACTION_UP 3. onClick

03-22 16:19:39.735: D/test(682): ontouch
03-22 16:19:39.735: D/test(682): ontouch
03-22 16:19:39.735: D/test(682): onclick
Run Code Online (Sandbox Code Playgroud)

  • @ user2161301如果从xml或代码中分配方法,则没有任何区别.这里的关键时刻就是在`OnTouchListener()`中返回false** - 如果返回`false`,那么系统将继续执行tap事件,最后将调用`onClick()`方法. (3认同)