事件是一種有用來收集用戶與應(yīng)用程序互動數(shù)據(jù)的互動組件,如按鍵或觸摸屏等放置事件,因為每個事件從Android框架維護事件隊列先入先出(FIFO)基礎(chǔ)上的隊列??梢栽诔绦蛑胁东@這些事件,按要求并采取適當(dāng)?shù)膭幼鳌?/p>
有以下三個概念涉及到Android事件管理:
事件監(jiān)聽器: 主要涉及建立一個Android的GUI視圖類,View類提供了一些事件監(jiān)聽器。事件監(jiān)聽器是對象接收通知在事件發(fā)生時。
事件監(jiān)聽器注冊: 事件注冊事件處理程序被注冊了事件偵聽器的過程,使該處理調(diào)用的事件偵聽器觸發(fā)事件。
事件處理程序: 當(dāng)一個事件發(fā)生時,已注冊的事件和事件監(jiān)聽器,事件監(jiān)聽器調(diào)用事件處理程序,這是實際處理事件的方法。
| 事件處理程序 | 事件監(jiān)聽器說明 |
|---|---|
| onClick() |
OnClickListener() 當(dāng)用戶點擊任意或觸摸或焦點事件像按鈕,文字,圖片等,將使用onClick()事件處理程序來處理任何部件的事件 |
| onLongClick() |
OnLongClickListener() 當(dāng)用戶點擊或觸摸或焦點事件像按鈕,文本,圖像等,為1秒以上的任何插件時被調(diào)用。使用onLongClick()事件處理程序來處理這樣的事件 |
| onFocusChange() |
OnFocusChangeListener() 當(dāng)控件失去焦點時被調(diào)用。用戶進入離開視圖項目。使用onFocusChange()事件處理程序來處理這樣的事件 |
| onKey() |
OnFocusChangeListener() 當(dāng)用戶焦點并按下或釋放裝置上的硬件鍵時被調(diào)用。將使用onKey()事件處理程序來處理這樣的事件 |
| onTouch() |
OnTouchListener() 當(dāng)用戶按下該鍵時及釋放鍵,或在屏幕上的任何移動手勢時被調(diào)用。使用onTouch()事件處理程序來處理這樣的事件 |
| onMenuItemClick() |
OnMenuItemClickListener() 當(dāng)用戶選擇一個菜單項時被調(diào)用。使用onMenuItemClick()事件處理程序來處理這樣的事件 |
還有更多可用作為View類如:OnHoverListener,OnDragListener 等,應(yīng)用程序可能需要一部分的事件偵聽器。因此,建議參考官方Android應(yīng)用程序開發(fā)文檔,開發(fā)一個復(fù)雜的應(yīng)用程序。
事件注冊事件處理程序被注冊事件偵聽器的過程,使處理時調(diào)用事件偵聽器處理事件。雖然有一些方法注冊可以任何事件的事件偵聽器,但要列出只前3種方式,可以根據(jù)實際情況使用。
使用匿名內(nèi)部類
Activity 活動類實現(xiàn)Listener接口
使用布局文件 activity_main.xml 直接指定事件處理程序(方法)
下面將提供三種情景的詳細(xì)的例子:
在這里,將創(chuàng)建一個匿名的執(zhí)行監(jiān)聽,如果每個類只有一個單控制器,將參數(shù)傳遞給事件處理程序。在這種方法中的事件處理方法可以訪問私有數(shù)據(jù)的活動。沒有提及需要調(diào)用到活動。
但是,如果聲明一個以上處理程序的控制器,剪切和粘貼代碼的處理程序和處理程序的代碼很長,代碼更難維護。
以下是簡單的步驟來展示我們將如何利用獨立的 Listener類 注冊并捕獲點擊(click)事件。類似的方式,可以實現(xiàn)所需的任何其他事件類型的偵聽。
| 步驟 | 描述 |
|---|---|
| 1 | 使用Android Studio創(chuàng)建一個Android應(yīng)用程序項目,將其命名為:EventDemo |
| 2 | 修改 src/MainActivity.java 程序文件,以添加 click事件偵聽器并處理程序定義的兩個按鈕 |
| 3 | 修改 res/layout/activity_main.xml 文件的默認(rèn)內(nèi)容包括Android的UI控件 |
| 4 | 定義res/values/strings.xml 文件所需的常量 |
| 5 | 運行該應(yīng)用程序啟動Android模擬器并驗證應(yīng)用程序所做的修改結(jié)果 |
以下是主 activity 文件src/com.yiibai.eventdemo/MainActivity.java 的內(nèi)容。這個文件可以包括每個生命周期的根本方法。
package com.yiibai.eventdemo; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //--- find both the buttons--- Button sButton = (Button) findViewById(R.id.button_s); Button lButton = (Button) findViewById(R.id.button_l); // -- register click event with first button --- sButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // --- find the text view -- TextView txtView = (TextView) findViewById(R.id.text_id); // -- change text size -- txtView.setTextSize(14); } }); // -- register click event with second button --- lButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // --- find the text view -- TextView txtView = (TextView) findViewById(R.id.text_id); // -- change text size -- txtView.setTextSize(24); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
下面是 res/layout/activity_main.xml 文件的內(nèi)容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button_s" android:layout_height="wrap_content" 上一篇:SimpleCursorAdapter下一篇:Android ProgressDialog