Android菜鸟的成长笔记(11)——Android中的事件处理
生活随笔
收集整理的這篇文章主要介紹了
Android菜鸟的成长笔记(11)——Android中的事件处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文: [置頂] Android菜鳥的成長筆記(11)——Android中的事件處理
Android提供了兩種方式來處理事件,一個是基于回調的事件處理,另一個是基于監聽的事件處理,舉個例子:
基于回調的事件處理
@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubreturn super.onTouchEvent(event);}基于監聽的事件處理
button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub}});一般來說,基于回調的事件處理可用于處理一些通用性的行為,而對于某些行為只能通過監聽事件處理。
一、監聽事件
監聽事件中,主要涉及三類對象:
EventSource(事件源):事件發生的場所,例如按鈕對象。
Event(事件):事件的相關信息的封裝類
EventListener(事件監聽器):負責監聽事件源,并對事件做出響應。
Android中的事件處理機制是一種委派式的方式,普通組件(事件源)將整個事件處理委托給特定的對象(事件監聽器),當該事件源發生指定的事件時,就通知所委托的事件監聽器,由事件監聽器來處理這個事件。
例如:
package com.example.testlistener;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.Button; import android.widget.EditText;public class MainActivity extends Activity {EditText txt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bn = (Button)findViewById(R.id.bn);txt = (EditText) findViewById(R.id.txt);bn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {txt.setText("我單擊了Button");}});bn.setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View arg0) {txt.setText("我長按了Button");return true;}});} }二、回調事件
如果監聽機制是一種委托式的事件處理,那么回調機制則恰好相反,對于基于回調的事件處理模型來說,事件源與事件監聽器是同一個對象,當用戶在某個組件上激發事件時,組件自己特定的方法會處理該事件。 例如: 新建一個MyButton類繼承自Button package com.example.testlistener;import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.Button;public class MyButton extends Button{public MyButton(Context context){super(context);}public MyButton(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public MyButton(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_UP:this.setText("點擊了我");break;default:break;}return super.onTouchEvent(event);} } 在MyButton中重寫了onTouchEvent方法,這就是回調監聽函數。 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><EditText android:id="@+id/txt"android:layout_width="match_parent"android:layout_height="wrap_content"android:editable="false"android:cursorVisible="false"android:textSize="12pt"/><com.example.testlistener.MyButton android:id="@+id/bn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="點我啊"/> </LinearLayout> 運行結果:三、系統設置事件
Configuration類專門用于描述手機設備上的配置信息,這些配置信息即包括用戶的特定配置也包括系統的動態設備配置。 例如: bn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {txt.setText("我單擊了Button");Configuration cfg = getResources().getConfiguration();//判斷屏幕方向String screen = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? "橫向屏幕":"豎向屏幕";//手機的MNC碼String mncCode = cfg.mnc + "";String naviName = cfg.orientation == Configuration.NAVIGATION_NONAV ? "沒有方向控制":cfg.orientation == Configuration.NAVIGATION_WHEEL ? "滾輪控制方向":cfg.orientation == Configuration.NAVIGATION_DPAD? "方向鍵控制方向":"軌跡球控制方向";String touchName = cfg.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH ? "無觸摸屏":"支持觸摸屏";System.out.println("screen = " + screen);System.out.println("mncCode = " + mncCode);System.out.println("naviName = " + naviName);System.out.println("touchName = " + touchName);}}); 運行結果:總結
以上是生活随笔為你收集整理的Android菜鸟的成长笔记(11)——Android中的事件处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 与众不同 windows phone (
- 下一篇: navigationbar