Android???TextView???????????
???????????? ???????[ 2013/5/16 10:28:29 ] ????????
??????. TextView?????????????????????
?????????Android??ó??????(Keyboard)????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????潨????????????е??
??????????????????????????????????????????????????????????????????????????????????????????????ó???????????????????????????????????????????????????????????????????????ViewRoot???????????deliverKeyEvent????deliverPointerEvent????????????????????????????????????У?ViewRoot?????????deliverKeyEvent?????????????????????ViewRoot?????????deliverPointerEvent?????????????????????
?????????????????ViewRoot?????????deliverKeyEvent????????????TextView?????ü???????????(???????????????????????)?????2?????
?????2 TextView?????ü???????????
????????????????14?????裬????????????????????????衣
????Step 1. ViewRoot.deliverKeyEvent
????[java] view plaincopyprint?
????public final class ViewRoot extends Handler implements ViewParent??
????View.AttachInfo.Callbacks {
????......
????private void deliverKeyEvent(KeyEvent event?? boolean sendDone) {
????// If mView is null?? we just consume the key event because it doesn't
????// make sense to do anything else with it.
????boolean handled = mView != null
????? mView.dispatchKeyEventPreIme(event) : true;
????if (handled) {
????if (sendDone) {
????finishInputEvent();
????}
????return;
????}
????// If it is possible for this window to interact with the input
????// method window?? then we want to first dispatch our key events
????// to the input method.
????if (mLastWasImTarget) {
????InputMethodManager imm = InputMethodManager.peekInstance();
????if (imm != null && mView != null) {
????int seq = enqueuePendingEvent(event?? sendDone);
????......
????imm.dispatchKeyEvent(mView.getContext()?? seq?? event??
????mInputMethodCallback);
????return;
????}
????}
????deliverKeyEventToViewHierarchy(event?? sendDone);
????}
????......
????}
????public final class ViewRoot extends Handler implements ViewParent??
????View.AttachInfo.Callbacks {
????......
????private void deliverKeyEvent(KeyEvent event?? boolean sendDone) {
????// If mView is null?? we just consume the key event because it doesn't
????// make sense to do anything else with it.
????boolean handled = mView != null
????? mView.dispatchKeyEventPreIme(event) : true;
????if (handled) {
????if (sendDone) {
????finishInputEvent();
????}
????return;
????}
????// If it is possible for this window to interact with the input
????// method window?? then we want to first dispatch our key events
????// to the input method.
????if (mLastWasImTarget) {
????InputMethodManager imm = InputMethodManager.peekInstance();
????if (imm != null && mView != null) {
????int seq = enqueuePendingEvent(event?? sendDone);
????......
????imm.dispatchKeyEvent(mView.getContext()?? seq?? event??
????mInputMethodCallback);
????return;
????}
????}
????deliverKeyEventToViewHierarchy(event?? sendDone);
????}
????......
????}
????????????????????frameworks/base/core/java/android/view/ViewRoot.java?С?
??????
???·???
??????????????????
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