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事件;第二种和第三种各种事件都适用。