在安卓中,有不止一種方法從你的應用截取用戶交互事件。在你的用戶界面中考慮事件,途徑就是從用戶界面中的一個指定的view對象中捕獲事件。該view提供了這樣作的方法。java
onClick()
來自View.OnClickListener
.。當用戶觸摸該item(觸摸模式下),或者使用導航鍵或軌跡球使焦點彙集在該項上而且按下了適當的"enter"(進入)按鍵或者在軌跡球上執行了按下操做。
onLongClick()
來自
View.OnLongClickListener
.。當用戶持續觸摸item時(觸摸模式下),或者使用導航鍵或軌跡球使焦點彙集在該項上而且持續按着適當的"enter"(進入)按鍵或者在軌跡球上執行持續按下操做(持續一秒)。
onFocusChange()
來自
View.OnFocusChangeListener
當用戶使用導航鍵或者軌跡球導航到或者離開該item 時。
onKey()
來自View.OnKeyListener
. 當用戶聚焦在了項目上而且按下或鬆開設備上的按鍵時
onTouch()
來自View.OnTouchListener
.當用戶執行一個合格的觸摸操做,包括按下,釋放或者任何屏幕上的手勢動做(在項目的邊界內)
onCreateContextMenu()
來自View.OnCreateContextMenuListener
. 當上下文菜單開始構建時調用(如持續「長按」的結果)。查看在
Menus開發嚮導中關於上下文菜單的討論。
// 爲OnClickListener建立一個匿名實例
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
public class ExampleActivity extends Activity implements OnClickListener {
protected void onCreate(Bundle savedValues) {
...
Button button = (Button)findViewById(R.id.corky);
button.setOnClickListener(this);
}
// Implement the OnClickListener callback
public void onClick(View v) {
// do something when the button is clicked
}
...
}
onClick()
回調並無返回值,可是一些其它的事件處理方法必須返回一個布爾類型。緣由取決於事件。這裏有少數的一些緣由:
onLongClick()
- 該方法返回一個布爾類型來指明你是否消耗了該事件,而且它不該該進一步傳遞下去。也就是說,返回true代表你處理了該事件而且它應該在這停下來;返回false,若是你沒有處理它或者該事件應該繼續傳遞給其它on-click監聽者。onKey()
- 該方法返回一個布爾類型來代表你是否消耗了該事件而且不該該進一步傳遞下去。也就是說,返回true代表你處理了該事件而且它應該在這停下來;返回false,若是你沒有處理它或者該事件應該繼續傳遞給其它on-click監聽者。onTouch()
- 該方法返回一個布爾類型來代表你是否消耗了該事件。重要的是該事件能夠有多個符合觸發條件的操做。所以,當按下事件被接受到,若是你返回了false,代表你沒有處理該事件而且對這個事件的後續行動不感興趣。所以,你不會爲每個操做都調用該事件,如手勢動做,或者最後的擡手動做(up action event)。onKeyDown()
和
onKeyUp()
.內收到各類事件。
onKeyDown(int, KeyEvent)
- 當一個新的按鍵事件發生時調用onKeyUp(int, KeyEvent)
- 當一個按鍵鬆開(key up )事件發生時調用onTrackballEvent(MotionEvent)
- 當一個軌跡球運動事件發生時onTouchEvent(MotionEvent)
- 當一個屏幕觸摸事件發生時onFocusChanged(boolean, int, Rect)
- 當該view得到或失去焦點時Activity.dispatchTouchEvent(MotionEvent)
-容許你的activity攔截全部的觸摸事件,在他們分發給window以前。ViewGroup.onInterceptTouchEvent(MotionEvent)
- 容許一個viewgroup 來觀察事件是否派遣給了子view。ViewParent.requestDisallowInterceptTouchEvent(boolean)
-調用該方法取決於父視圖,代表它不該該經過onInterceptTouchEvent(MotionEvent)
.攔截觸摸事件。isInTouchMode()
來查看設備當前是否處於觸摸模式。
setFocusableInTouchMode()
你能夠改變它。
<LinearLayout
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
<Button android:id="@+id/bottom"
android:nextFocusDown="@+id/top"
... />
</LinearLayout>
android:focusable
xml屬性,在你的佈局文件中聲明。設置該值爲true。你也能夠聲明該view的可聚焦性,當在觸摸模式時經過
android:focusableInTouchMode
.