绑定单击事件有两种方法,一种是通过绑定android:onClick属性,一种是绑定一个setOnClickListener回调函数

通过绑定onClick属性

在activity_main.xml对应的组件上设置android:onClick=”test” 属性,然后再Java文件里定义一个test方法来实现,这个test方法是MainActivity类的一个方法

1
2
3
4

public void test(View view){
Toast.makeText(MainActivity.this, "你还真敢点啊!", Toast.LENGTH_LONG).show();
}

这里的view就是要使用的控件,如果是绑定的是个button,那么view就是这个button

通过setOnClickListener

此时需要将这个setOnClickListener回调函数写在onCreate()函数里

1
2
3
4
5
6
7
8
9
10
11

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "我是被点击的", Toast.LENGTH_LONG).show();
}
});
}

可以看到setOnClickListener不属于某个控件,在使用的时候要先通过findViewById方法找到要进行onClick方法的控件。

将2中的onClickListener方法分离出来

这个方式将OnClickListener分离出来写在MainActibity类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private View.OnClickListener myListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
Toast.makeText(MainActivity.this, "button1被点击了", Toast.LENGTH_LONG).show();
break;
case R.id.button2:
Toast.makeText(MainActivity.this, "button2被点击了", Toast.LENGTH_LONG).show();
break;
case R.id.button3:
Toast.makeText(MainActivity.this, "button3被点击了", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};

然后在onCreate方法中使用

Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
Button button3 = (Button)findViewById(R.id.button3);
button1.setOnClickListener(myListener);
button2.setOnClickListener(myListener);
button3.setOnClickListener(myListener);

这种方法可以复用方法,也可以多些判断,比较灵活

长按与短按

长按有一个返回值,当一个控件既绑定了一个长铵同时又绑定了一个短按,如果长按的返回值是false时,那么在长按以后同时也会触发短按事件

1
2
3
4
5
6
7
8
9
10
11
12

button4.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
System.out.println("按钮进行了长按");
return true; //返回true后就不会再触发短按事件
}
});
button4.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println("按钮进行了短按");
}
});

setOnTouchListener事件,滑动事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
final Button button4 = (Button)findViewById(R.id.button4);
ViewGroup viewGroup = (ViewGroup) findViewById(R.id.vg1);
viewGroup.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int eventType = event.getAction();
if (eventType == MotionEvent.ACTION_DOWN) {
button4.setX(event.getX());
button4.setY(event.getY());
System.out.println("down…");
}else if (eventType == MotionEvent.ACTION_MOVE) {
button4.setX(event.getX());
button4.setY(event.getY());
System.out.println("move…");
}else if (eventType==MotionEvent.ACTION_UP) {
&
#160; System.out.println("up…");
}
return true;
}
});

setOnKeyListener 监听键盘按键操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
button4.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//a:29 s:47 d:32 w:51
if (keyCode == 29) {
button4.setX(button4.getX()-10);
}else if (keyCode == 47) {
button4.setY(button4.getY()+10);
}else if (keyCode == 32) {
button4.setX(button4.getX()+10);
}else if (keyCode == 51) {
button4.setY(button4.getY()-10);
}else {
}
return false;
}
});