一、基于监听的事件处理
1.监听处理模型
是个委派式事件处理方式
例如:A公司发生火灾,自己不会处理,委派给消防局处理。在这里事件源是A公司,事件是火灾,事件监听器是消防局。A公司根据发生的事件不同,把任务委派给不同的处理单位,消防局也不是单单为A公司服务的,同时会监听B公司、C公司等的委派。
- EventSource(事件源):事件发生的地方,如按钮
- Event(事件):发生的事,一般就是用户的一次操作
- EventListener(事件监听器):监听事件源发生的事件,并作出响应
点击监听
package com.example.tlh;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
1. 点击监听就是最常见的监听事件
2. 事件源:按钮
3. 事件:点击
4. 事件监听器:View.OnClickListener()
*/
public class MainActivity extends AppCompatActivity {
private Button button;
private TextView show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
show = (TextView) findViewById(R.id.show);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
show.setText("点击了");
}
});
}
}
2.监听器的形式
- 内部类(如果你多个按钮需要同一个处理)
- 匿名内部类(我这里使用的)
- 外部类(如果你多个类内需要同样的事件处理)
- Activity本身作为监听器(代码简单,就是怪怪的,不建议使用)
- 直接绑定到标签(使用简单)
二、基于回调的事件处理
1.回调处理模型
和基于监听的事件委派式处理方式完全不同。在基于回调的事件处理,事件源和事件监听器是一体的,或者说没有事件监听器。
2.View给我们提供的回调方法
方法名 | 介绍 |
---|---|
onKeyDown | 按下按键 |
onKeyLongDown | 长按按键 |
onKeyShortcut | 快捷键 |
onKeyUp | 松开按键 |
onTouchEvent | 触摸触摸屏相关事件 |
onTrackballEvent | 轨迹球 |
3.基于回调的事件传播
几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,用于标示该处理方法是否能完全处理该事件。
- true 表明已经完全处理该事件,该事件不会再传播出去。
- false 表明该事件并未完全处理该事件
4.onTouchEvent回调监听
package com.example.tlh;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
/**
* 重写onTouchEvent方法响应触摸事件
*/
public class MyView extends View {
private Paint paint = new Paint();
private float cx = 40;
private float cy = 40;
private float r = 15;
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(Color.RED);
canvas.drawCircle(cx, cy, r, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 获取当前XY坐标
this.cx = event.getX();
this.cy = event.getY();
// 重绘
this.invalidate();
// 已经处理完该事件
return true;
}
}
三、响应系统设置的事件
1.Configuration类
专门获取手机设备上的配置信息
在Activity中使用如下方法可获取:
Configuration cfg = getResources().getConfiguration();
常用属性
属性名 | 介绍 |
---|---|
fontScale | 字体的缩放因子 |
fontScale | 字体的缩放因子 |
keyboard | 关联的键盘类型 |
keyboardHidde | 键盘是否可用 |
locale | 获取当前Locale值 |
mcc | 移动信号国家码 |
mnc | 移动信号网络码 |
navigation | 方向导航设备类型 |
orientation | 屏幕方向 |
touchscreen | 触摸方式 |