Android中的InputEventsr的簡介(翻譯自官方文檔)——————個人筆記

Event Listeners:
  View.OnClickListener onClick() 點擊事件 
  View.OnLongClickListener onLongClick() 長按事件  .
  View.OnFocusChangeListener onFoucusChange() 焦點改變事件
  View.OnKeyListener onKey() 在某一個控件上的按鍵按下或鬆開的事件  .
  View.OnTouchListener  onTouch() 在某一個控件內的觸碰事件 
  View.OnCreateContextMenuListener onCreateContextMenu() 上下文菜單創建時調用,詳見Menu文檔  
  
  eg:
 //實現一個OnClickListener的類
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
 // do something當點擊按鈕的時候。
}
};


protected void onCreate(Bundle savedValues) {
//定位Button
Button button = (Button)findViewById(R.id.corky);
//註冊點擊監聽
button.setOnClickListener(mCorkyListener);
}

以上的方法中,其中有3個是有返回值的,如下:
onLongClick()
當返回true的時候,表示在這個方法中已經對這個事件進行了處理,而且event不會再進行傳遞
當返回false的時候,表示在這個方法中沒有對這個事件進行處理,event會繼續傳遞。
onKey() 同上
onTouch() 返回true,表示消費了這個事件
 返回了false,表示對這個事件不感興趣。
 
對於key event,系統是從根視圖開始分發,直到到達目的控件,除此之外,
你還可以在Activity中的onKeyDown()和onKeyUp()方法中接收到所有的事件

Event Handlers:
在View對象中的處理事件的方法:
onKeyDown(int, KeyEvent) - Called when a new key event occurs.
onKeyUp(int, KeyEvent) - Called when a key up event occurs.
onTrackballEvent(MotionEvent) - Called when a trackball motion event occurs.
onTouchEvent(MotionEvent) - Called when a touch screen motion event occurs.
onFocusChanged(boolean, int, Rect) - Called when the view gains or loses focus.

以下幾個不是在View中的方法,但是直接影響到event的傳遞
Activity.dispatchTouchEvent(MotionEvent) 
- 可以讓Activity 在事件傳遞到window之前,取攔截所有的觸摸事件
ViewGroup.onInterceptTouchEvent(MotionEvent) 
- 讓ViewGroup去監聽event當把事件傳遞到子View的時候
ViewParent.requestDisallowInterceptTouchEvent(boolean) 
- 通知父View不要使用onInterceptTouchEvent(MotionEvent)方法來攔截事件。

Touch Mode:
    設備是可觸控時,一旦觸摸屏幕,設備就會進入到Touch Mode。
    在這個模式下,只有isFocusableInTouchMode()返回true的時候,控件纔是focusable,例如EditText
但是返回false的時候,例如Button,就只會觸發點擊事件。
當使用其他的如滾動球等硬件按鈕時,設備就會退出Touch Mode,這時會找到一個控件來focus。
可以通過isTouchMode()來獲取當前設備的狀態。

Handling Focus:
      isFocusable()
 setFocusable()
 isFocusableInTouchMode()
 setFocusableInTouchMode()
 
 focus動作是基於一個指定方位尋找最近的算法。
 在罕見的情況下,默認的算法可能會不匹配開發者的行爲。在這時,可以使用以下的屬性:
   nextFocusDown, nextFocusLeft, nextFocusRight,nextFocusUp
使用這些屬性在xml佈局中來指定(我想應該是不在Touch Mode下使用的吧)
eg:
<LinearLayout
android:orientation="vertical"
... >
<Button android:id="@+id/top"
android:nextFocusUp="@+id/bottom"
... />
 <Button android:id="@+id/bottom"
 android:nextFocusDown="@+id/top"
 ... />
</LinearLayout>
使用這兩個屬性在佈局中來指定控件的可focus性。
android:focusable 
android:focusableInTouchMode

使用requestFocus()方法來使控件獲得聚焦。


參考官方文檔的ui中的inputEvents


  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章