Step 13. TextView.onKeyDown
[java] view plaincopyprint?
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
......
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
int which = doKeyDown(keyCode, event, null);
if (which == 0) {
// Go through default dispatching.
return super.onKeyDown(keyCode, event);
}
return true;
}
......
}
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
......
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
int which = doKeyDown(keyCode, event, null);
if (which == 0) {
// Go through default dispatching.
return super.onKeyDown(keyCode, event);
}
return true;
}
......
}
這個函數定義在文件frameworks/base/core/java/android/widget/TextView.java中。
TextView類的成員函數onKeyDown調用另外一個成員函數doKeyDown來處理參數event所描述的鍵盤事件,以便可以相應地改變當前獲得焦點的TextView控件的UI。當TextView類的成員函數doKeyDown的返回值which等于0的時候,就表示當前獲得焦點的TextView控件希望參數event所描述的鍵盤事件可以繼續分發給它的父類View處理,這是通過調用父類View的成員函數onKeyDown來實現的。
至此,我們就分析完成TextView控件獲得鍵盤事件的過程了,整個TextView控件的實現框架也分析完成了。
在Android系統中,其它的Android控件與TextView控件的實現框架都是類似的,區別就在于實現細節和所表現的UI不一樣,而且它們一般都有一個共同的特點,那就是都在宿主窗口的繪圖表面上進行UI繪制。在接下來的一篇文章中,我們就分析另外一個種以SurfaceView為代表的特殊控件,它們的UI是繪制在一個專用的繪圖表面上面的,即它們不與宿主窗口共享同一個繪圖表面。敬請關注!
原文轉自:http://blog.csdn.net/luoshengyang/article/details/8636153