????Step 10. ViewGroup.dispatchKeyEvent

????[java] view plaincopyprint?

????public abstract class ViewGroup extends View implements ViewParent?? ViewManager {

????......

????@Override

????public boolean dispatchKeyEvent(KeyEvent event) {

????if ((mPrivateFlags & (FOCUSED | HAS_BOUNDS)) == (FOCUSED | HAS_BOUNDS)) {

????return super.dispatchKeyEvent(event);

????} else if (mFocused != null && (mFocused.mPrivateFlags & HAS_BOUNDS) == HAS_BOUNDS) {

????return mFocused.dispatchKeyEvent(event);

????}

????return false;

????}

????......

????}

????public abstract class ViewGroup extends View implements ViewParent?? ViewManager {

????......

????@Override

????public boolean dispatchKeyEvent(KeyEvent event) {

????if ((mPrivateFlags & (FOCUSED | HAS_BOUNDS)) == (FOCUSED | HAS_BOUNDS)) {

????return super.dispatchKeyEvent(event);

????} else if (mFocused != null && (mFocused.mPrivateFlags & HAS_BOUNDS) == HAS_BOUNDS) {

????return mFocused.dispatchKeyEvent(event);

????}

????return false;

????}

????......

????}

????????????????????frameworks/base/core/java/android/view/ViewGroup.java?С?

????ViewGroup?????????dispatchKeyEvent?????????????Step 3?????????ViewGroup?????????dispatchKeyEventPreIme?????????????????????????????????????????y????????????????С????????????????????event??????????????????????????View????????dispatchKeyEvent???????????????????????????????????????????????????????????????????????С????????????????????event????????????????????y?????????????View????????dispatchKeyEvent???????

????????????ù????????????????????????????????Activity?????????????????????????????????У???y?????????TextView????????????TextView??????С????????????????????????????TextView????????View????????dispatchKeyEvent?????????event????????????????

????Step 11. View.dispatchKeyEvent

????[java] view plaincopyprint?

????public class View implements Drawable.Callback?? KeyEvent.Callback?? AccessibilityEventSource {

????......

????private OnKeyListener mOnKeyListener;

????......

????public boolean dispatchKeyEvent(KeyEvent event) {

????// If any attached key listener a first crack at the event.

????//noinspection SimplifiableIfStatement

????......

????if (mOnKeyListener != null && (mViewFlags & ENABLED_MASK) == ENABLED

????&& mOnKeyListener.onKey(this?? event.getKeyCode()?? event)) {

????return true;

????}

????return event.dispatch(this?? mAttachInfo != null

????? mAttachInfo.mKeyDispatchState : null?? this);

????}

????......

????}

????public class View implements Drawable.Callback?? KeyEvent.Callback?? AccessibilityEventSource {

????......

????private OnKeyListener mOnKeyListener;

????......

????public boolean dispatchKeyEvent(KeyEvent event) {

????// If any attached key listener a first crack at the event.

????//noinspection SimplifiableIfStatement

????......

????if (mOnKeyListener != null && (mViewFlags & ENABLED_MASK) == ENABLED

????&& mOnKeyListener.onKey(this?? event.getKeyCode()?? event)) {

????return true;

????}

????return event.dispatch(this?? mAttachInfo != null

????? mAttachInfo.mKeyDispatchState : null?? this);

????}

????......

????}

????????????????????frameworks/base/core/java/android/view/View.java?С?

??????View?????????mOnKeyListener?????????null??????????????OnKeyListener???????????????????????????????????????????????????????????£????????????????????????????????????????????mViewFlags??ENABLEDλ????1?????????event???????????????????ü????????????????????????????View?????????mOnKeyListener?????????OnKeyListener???????????onKey???????