1、常见事件
(1)单击事件
onClickListener
(2)长按事件
onLongClickListener
(3)滑动事件
onTouchListener
(4)键盘事件
onKeyListener
(5)焦点事件
setOnFocusChangeListener
2、响应方式
对于上述的事件,一般分为三种响应方式:基于配置、动态设置、可复用。以onClick为例进行解读。
(1)基于配置
在配置文件activity_main.xml文件中添加一个button,如下:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="140dp"
android:text="Button1"
android:onClick="test"
/>
并且为该button添加了点击事件,对应的处理函数为test,在MainActivity.java中添加test处理函数,如下:
public void test(View view) {
Toast.makeText(this, "点击了我", Toast.LENGTH_SHORT).show();
Log.i("ee", "this is a info");
}
注意:基于配置的方式只能针对于onClick事件。
(2)动态设置
即为View动态添加onClickListener事件,在MainActivity.java中添加如下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button1);
//添加点击事件监听
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_SHORT).show();
}
});
}
上述方式实现了动态设置,但是如果有多个按钮呢,造成了代码的冗余,耦合性较高,需要进行解耦,因此有了可复用的方式。
(3)可复用
比如有3个按钮,MainActivity.java代码如下:
package com.example.test_listener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* 配置方式(仅限onClick)
* 动态设置
* 可复用方式
* @author yy
*
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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);
}
//添加绑定事件
private View.OnClickListener myListener = new OnClickListener() {
@Override
public void onClick(View view) {
//根据不同的按钮,实现不同的逻辑
switch (view.getId()) {
case R.id.button1:
Toast.makeText(MainActivity.this, "buttton1被点击了", Toast.LENGTH_SHORT).show();
break;
case R.id.button2:
Toast.makeText(MainActivity.this, "button2被点击了", Toast.LENGTH_SHORT).show();
break;
case R.id.button3:
Toast.makeText(MainActivity.this, "button3被点击了", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void test(View view) {
Toast.makeText(this, "点击了我", Toast.LENGTH_SHORT).show();
Log.i("ee", "this is a info");
}
}
对于第一种方式,仅限于onClick事件;第二种和第三种各种事件都适用。