事件是一種有用來(lái)收集用戶與應(yīng)用程序互動(dòng)數(shù)據(jù)的互動(dòng)組件,如按鍵或觸摸屏等放置事件,因?yàn)槊總€(gè)事件從Android框架維護(hù)事件隊(duì)列先入先出(FIFO)基礎(chǔ)上的隊(duì)列??梢栽诔绦蛑胁东@這些事件,按要求并采取適當(dāng)?shù)膭?dòng)作。
有以下三個(gè)概念涉及到Android事件管理:
事件監(jiān)聽(tīng)器: 主要涉及建立一個(gè)Android的GUI視圖類(lèi),View類(lèi)提供了一些事件監(jiān)聽(tīng)器。事件監(jiān)聽(tīng)器是對(duì)象接收通知在事件發(fā)生時(shí)。
事件監(jiān)聽(tīng)器注冊(cè): 事件注冊(cè)事件處理程序被注冊(cè)了事件偵聽(tīng)器的過(guò)程,使該處理調(diào)用的事件偵聽(tīng)器觸發(fā)事件。
事件處理程序: 當(dāng)一個(gè)事件發(fā)生時(shí),已注冊(cè)的事件和事件監(jiān)聽(tīng)器,事件監(jiān)聽(tīng)器調(diào)用事件處理程序,這是實(shí)際處理事件的方法。
| 事件處理程序 | 事件監(jiān)聽(tīng)器說(shuō)明 |
|---|---|
| onClick() |
OnClickListener() 當(dāng)用戶點(diǎn)擊任意或觸摸或焦點(diǎn)事件像按鈕,文字,圖片等,將使用onClick()事件處理程序來(lái)處理任何部件的事件 |
| onLongClick() |
OnLongClickListener() 當(dāng)用戶點(diǎn)擊或觸摸或焦點(diǎn)事件像按鈕,文本,圖像等,為1秒以上的任何插件時(shí)被調(diào)用。使用onLongClick()事件處理程序來(lái)處理這樣的事件 |
| onFocusChange() |
OnFocusChangeListener() 當(dāng)控件失去焦點(diǎn)時(shí)被調(diào)用。用戶進(jìn)入離開(kāi)視圖項(xiàng)目。使用onFocusChange()事件處理程序來(lái)處理這樣的事件 |
| onKey() |
OnFocusChangeListener() 當(dāng)用戶焦點(diǎn)并按下或釋放裝置上的硬件鍵時(shí)被調(diào)用。將使用onKey()事件處理程序來(lái)處理這樣的事件 |
| onTouch() |
OnTouchListener() 當(dāng)用戶按下該鍵時(shí)及釋放鍵,或在屏幕上的任何移動(dòng)手勢(shì)時(shí)被調(diào)用。使用onTouch()事件處理程序來(lái)處理這樣的事件 |
| onMenuItemClick() |
OnMenuItemClickListener() 當(dāng)用戶選擇一個(gè)菜單項(xiàng)時(shí)被調(diào)用。使用onMenuItemClick()事件處理程序來(lái)處理這樣的事件 |
還有更多可用作為View類(lèi)如:OnHoverListener,OnDragListener 等,應(yīng)用程序可能需要一部分的事件偵聽(tīng)器。因此,建議參考官方Android應(yīng)用程序開(kāi)發(fā)文檔,開(kāi)發(fā)一個(gè)復(fù)雜的應(yīng)用程序。
事件注冊(cè)事件處理程序被注冊(cè)事件偵聽(tīng)器的過(guò)程,使處理時(shí)調(diào)用事件偵聽(tīng)器處理事件。雖然有一些方法注冊(cè)可以任何事件的事件偵聽(tīng)器,但要列出只前3種方式,可以根據(jù)實(shí)際情況使用。
使用匿名內(nèi)部類(lèi)
Activity 活動(dòng)類(lèi)實(shí)現(xiàn)Listener接口
使用布局文件 activity_main.xml 直接指定事件處理程序(方法)
下面將提供三種情景的詳細(xì)的例子:
在這里,將創(chuàng)建一個(gè)匿名的執(zhí)行監(jiān)聽(tīng),如果每個(gè)類(lèi)只有一個(gè)單控制器,將參數(shù)傳遞給事件處理程序。在這種方法中的事件處理方法可以訪問(wèn)私有數(shù)據(jù)的活動(dòng)。沒(méi)有提及需要調(diào)用到活動(dòng)。
但是,如果聲明一個(gè)以上處理程序的控制器,剪切和粘貼代碼的處理程序和處理程序的代碼很長(zhǎng),代碼更難維護(hù)。
以下是簡(jiǎn)單的步驟來(lái)展示我們將如何利用獨(dú)立的 Listener類(lèi) 注冊(cè)并捕獲點(diǎn)擊(click)事件。類(lèi)似的方式,可以實(shí)現(xiàn)所需的任何其他事件類(lèi)型的偵聽(tīng)。
| 步驟 | 描述 |
|---|---|
| 1 | 使用Android Studio創(chuàng)建一個(gè)Android應(yīng)用程序項(xiàng)目,將其命名為:EventDemo |
| 2 | 修改 src/MainActivity.java 程序文件,以添加 click事件偵聽(tīng)器并處理程序定義的兩個(gè)按鈕 |
| 3 | 修改 res/layout/activity_main.xml 文件的默認(rèn)內(nèi)容包括Android的UI控件 |
| 4 | 定義res/values/strings.xml 文件所需的常量 |
| 5 | 運(yùn)行該應(yīng)用程序啟動(dòng)Android模擬器并驗(yàn)證應(yīng)用程序所做的修改結(jié)果 |
以下是主 activity 文件src/com.yiibai.eventdemo/MainActivity.java 的內(nèi)容。這個(gè)文件可以包括每個(gè)生命周期的根本方法。
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