Android事件处理:
---------------------------------------------------------------------
1.基于监听的事件处理方式:
事件:Event Source,Event,Event Listener。
监听步骤:获取控件对象---实现某一个XxxListener监听器接口---将监听器通过setXxxListener绑定在控件对象上。
Listener接口:OnClickListener,OnKeyListener,OnLongClickListener,OnTouchListener,OnFocusChangeListener,OnCreateContextMenuListener,OnCheckChangeListener,……。
监听器的实现方式:
(1)内部类形式
public class EventQs extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取应用程序中的bn按钮 Button bn = (Button)findViewById(R.id.bn); //为按钮绑定事件监听器。 bn.setOnClickListener(new MyClickListener()); } //定义一个单击事件的监听器 class MyClickListener implements View.OnClickListener { //实现监听器类必须实现的方法,该方法将会作为事件处理器 @Override public void onClick(View arg0) { EditText txt = (EditText)findViewById(R.id.txt); txt.setText("bn按钮被单击了!"); } }}
(2)外部类形式
(3)匿名内部类形式
public class AnonymousListener extends Activity{ EditText show; Button bn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); show = (EditText)findViewById(R.id.show); bn = (Button)findViewById(R.id.bn); //直接使用Activity作为事件监听器 bn.setOnClickListener(new OnClickListener() { //实现事件处理方法 @Override public void onClick(View v) { // TODO Auto-generated method stub show.setText("bn按钮被单击了!"); } }); }}
(4)Activity本身作为事件监听器类
//实现事件监听器接口public class ActivityListener extends Activity implements OnClickListener{ EditText show; Button bn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); show = (EditText)findViewById(R.id.show); bn = (Button)findViewById(R.id.bn); //直接使用Activity作为事件监听器 bn.setOnClickListener(this); } //实现事件处理方法 @Override public void onClick(View v) { // TODO Auto-generated method stub show.setText("bn按钮被单击了!"); }}
(5)直接绑定到标签
---------------------------------------------------------------------
2.基于回调的事件处理方式。
View类的回调方法:onKeyDown(),onKeyLongPress(),onKeyShortcut(),onKeyUp(),onTouchEvent(),onTrackballEvent()。
基于回调的事件处理还常用自定义View类来实现:重写View的事件处理方法。
public class DrawView extends View{ public float currentX = 40; public float currentY = 50; /** * @param context */ public DrawView(Context context , AttributeSet set) { super(context , set); } @Override public void onDraw (Canvas canvas) { super.onDraw(canvas); //创建画笔 Paint p = new Paint(); //设置画笔的颜色 p.setColor(Color.RED); //绘制一个小圆(作为小球) canvas.drawCircle(currentX , currentY , 15 , p); } @Override public boolean onTouchEvent(MotionEvent event) { //当前组件的currentX、currentY两个属性 this.currentX = event.getX(); this.currentY = event.getY(); //通知改组件重绘 this.invalidate(); //返回true表明处理方法已经处理该事件 return true; } }//
基于回调的事件传播:返回true不会对外传播,返回false对外传播。
3.Configuration系统设置:手机设备上的配置信息(屏幕,网络信号等)
获取对象:Configuration cfg = getResources().getConfiguration();
Configuration对象中有许多表示系统配置信息的属性:……。
相应系统设置更改:@ onConfigurationChanged()方法。