Android控件TextView的实现原理分析(10)

发表于:2013-04-02来源:Csdn作者:罗升阳点击数: 标签:Android
Step 13. TextView.onKeyDown [java] view plaincopyprint? public class TextView extends View implements ViewTreeObserver.OnPreDrawListener { ...... @Override public boolean onKeyDown(int keyCode, KeyEve

  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