Android???TextView???????????
???????????? ???????[ 2013/5/16 10:28:29 ] ????????
????ViewRoot?????????deliverKeyEventToViewHierarchy?????????event??????????????????????????????????????????????????????ViewRoot?????????mView???????????DecorView???????????dispatchKeyEvent???????
????????????????????????????????????event?????????????????????ü???????????????ViewRoot?????????deliverKeyEventToViewHierarchy??????????????DecorView?????????dispatchKeyEvent?????????keyHandled????????false????????????£????????event??????????????μ???????????????isDown???????true?????ViewRoot?????????deliverKeyEventToViewHierarchy???????????event??????????????DPAD???????????????????????????????????????????
???????????event???????????DPAD?????????????????direction??????????0?????????????????????μ?????????????DPAD????????????????????????????????????????ViewRoot?????????mView???????????DecorView???????????findFocus??????focused??????null???????????????????direction???????????????????????????????磬???????direction???????View.FOCUS_LEFT??????????????????????focused???????????????????????????????????????????????????????????????focused????????focusSearch???????
??????????????????????????v????????????????????????????focused?????ViewRoot?????????deliverKeyEventToViewHierarchy??????????v??????????????????????????????v???????????View???????????requestFocus???????
????????????????????event???????????????????????????????????sendDone???????true????????????????????????????????event??????????????????????????????????????ViewRoot?????????finishInputEvent???????
???????????????????????DecorView?????????dispatchKeyEvent????????????????????????????????????????
????Step 6. DecorView.dispatchKeyEvent
????[java] view plaincopyprint?
????public class PhoneWindow extends Window implements MenuBuilder.Callback {
????......
????private final class DecorView extends FrameLayout implements RootViewSurfaceTaker {
????......
????@Override
????public boolean dispatchKeyEvent(KeyEvent event) {
????final int keyCode = event.getKeyCode();
????final boolean isDown = event.getAction() == KeyEvent.ACTION_DOWN;
????......
????final Callback cb = getCallback();
????final boolean handled = cb != null && mFeatureId < 0 ? cb.dispatchKeyEvent(event)
????: super.dispatchKeyEvent(event);
????if (handled) {
????return true;
????}
????return isDown ? PhoneWindow.this.onKeyDown(mFeatureId?? event.getKeyCode()?? event)
????: PhoneWindow.this.onKeyUp(mFeatureId?? event.getKeyCode()?? event);
????}
????......
????}
????......
????}
????public class PhoneWindow extends Window implements MenuBuilder.Callback {
????......
????private final class DecorView extends FrameLayout implements RootViewSurfaceTaker {
????......
????@Override
????public boolean dispatchKeyEvent(KeyEvent event) {
????final int keyCode = event.getKeyCode();
????final boolean isDown = event.getAction() == KeyEvent.ACTION_DOWN;
????......
????final Callback cb = getCallback();
????final boolean handled = cb != null && mFeatureId < 0 ? cb.dispatchKeyEvent(event)
????: super.dispatchKeyEvent(event);
????if (handled) {
????return true;
????}
????return isDown ? PhoneWindow.this.onKeyDown(mFeatureId?? event.getKeyCode()?? event)
????: PhoneWindow.this.onKeyUp(mFeatureId?? event.getKeyCode()?? event);
????}
????......
????}
????......
????}
????????????????????frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java?С?
??????
![](/images/ad-banner/ad-banner.png)
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11