两种事件处理
- 基于监听的事件处理
- 基于回调的事件处理
基于监听的事件处理
为UI组件绑定特定的监听器,例如按钮监听点击
三个事件处理相关的对象
该事件处理构成包括三个对象:事件源、事件监听器、事件
- 事件源:例如按钮之类的,触发事件的对象
- 事件监听器::为事件源添加事件监听器,例如设置点击事件监听器
- 事件:在事件监听器中添加监听事件,例如设置了点击事件监听器,那么就可以监听点击事件
事件处理流程
为事件源添加事件监听器,由外部动作触发事件源(例如点击)从而产生事件,然后将事件传入到事件监听器中,由事件处理器处理
实例
如下是监听按钮点击的实例
Button jump = findViewById(R.id.jump);
jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT);
}
});
基于回调的事件处理
两种方式
- 重写Android组件的回调方法
- 重写Activity的回调方法
几个重写方法
一般经常重写的几个方法有:onTouchEvent、onKeyUp、onKeyDown
package com.example.study2;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Toast.makeText(MainActivity.this, "触摸", Toast.LENGTH_SHORT).show();
return super.onTouchEvent(event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Toast.makeText(MainActivity.this, "放开", Toast.LENGTH_SHORT).show();
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Toast.makeText(MainActivity.this, "按下", Toast.LENGTH_SHORT).show();
return super.onKeyDown(keyCode, event);
}
}
- onTouchEvent:触摸屏幕触发
- onKeyDown:按下手机的物理按键
- onKeyUp:松开手机的物理按键,例如松开手机的电量按钮
应用场景
通过上述可以知道,基于回调的事件处理方式,其中keyDown是所有物理按键按下都会触发,而基于监听的事件处理方式,例如监听点击,只能是监听某个事件源例如按钮的点击事件