最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

InputMethodManager輸入法窗口為啥dumpsys是全屏?千里馬帶你疑難解惑輸入法相關(guān)

2023-09-15 18:14 作者:千里馬學(xué)框架  | 我要投稿

背景:

hi,粉絲朋友: 大家好!近來陸續(xù)有粉絲朋友在群里討論到輸入法,這個部分其實馬哥之前也是研究過的,所以相對來說比較熟悉,其實android設(shè)計輸入法的思路其實和壁紙是一模一樣的。大體設(shè)計圖如下:

一般看到的輸入法界面就是輸入法進程,一般都是實現(xiàn)了InputMethodService的子類實現(xiàn),這里面會創(chuàng)建對應(yīng)的輸入法窗口展示,所以這里要說明輸入法它不是個Activity哈,只是個全局窗口而已,和狀態(tài)欄啥的一樣。

剛好有個同學(xué)問了一個輸入法的疑問,為啥dumpsys window windows和dumpsys SurfaceFlinger時候明明看到輸入法是全屏,這個是怎么回事?

1、dumpsys相關(guān)SurfaceFlinger和window看看全屏情況

以下是winsocpe的SurfaceFlinger圖層情況

activeBuffer : w:1440, h:2876, stride:2816, format:1

再看看對應(yīng)的window相關(guān)的信息:

也展示出來的大小是 frame : (0, 84) - (1440, 2960) 也都是全屏。

2、疑問點既然輸入法全屏為啥activity還可以響應(yīng)事件

首先顯示部分遮蓋理解:

這個部分相對比較好理解,因為窗口雖然是占全屏幕,但是可以又一部分透明透看到底部的窗口

其次觸摸部分:

層級結(jié)構(gòu)看輸入法應(yīng)該是蓋在Activity的窗口上面,而且輸入法又是全屏的,那么理論上所有的觸摸事件就應(yīng)該到輸入法的窗口,而不應(yīng)該到Activity的窗口。 但是實際情況又是如下圖所示:

即只有輸入法顯示的部分才是輸入法可以觸摸的,觸摸activity的部分那么activity就會響應(yīng)對應(yīng)的觸摸事件。

需要回答這個問題就又需要使用我們input課程的知識:需要試看課程的可以點擊這里:https://www.bilibili.com/video/BV1YS4y1K7rj/[1]

也可以+w:androidframework007 找我

要學(xué)回查看dumpsys input輸出信息:


Input?Dispatcher?State:
??DispatchEnabled:?true
??DispatchFrozen:?false
??InputFilterEnabled:?false
??FocusedDisplayId:?0
??FocusedApplications:
????displayId=0,?name='ActivityRecord{49e3140?u0?com.android.quicksearchbox/.SearchActivity}?t439}',?dispatchingTimeout=5000ms
??FocusedWindows:
????displayId=0,?name='313a198?com.android.quicksearchbox/com.android.quicksearchbox.SearchActivity'
??FocusRequests:
????displayId=0,?name='313a198?com.android.quicksearchbox/com.android.quicksearchbox.SearchActivity'?result='OK'
??Pointer?Capture?Requested:?false
??Current?Window?with?Pointer?Capture:?None
??TouchStates:?<no?displays?touched>
??Display:?0
????logicalSize=1440x2960
????????transform?(ROT_0)?(IDENTITY)
????Windows:
??????0:?name='[Gesture?Monitor]?swipe-up',?id=106,?displayId=0,?inputConfig=NOT_FOCUSABLE?|?TRUSTED_OVERLAY?|?SPY,?alpha=1.00,?frame=[0,0][0,0],?globalScale=1.000000,?applicationInfo.name=[Gesture?Monitor]?swipe-up,?applicationInfo.token=<null>,?touchableRegion=[-14399,-29599][14400,29600],?ownerPid=1047,?ownerUid=10097,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????1:?name='[Gesture?Monitor]?edge-swipe',?id=81,?displayId=0,?inputConfig=NOT_FOCUSABLE?|?TRUSTED_OVERLAY?|?SPY,?alpha=1.00,?frame=[0,0][0,0],?globalScale=1.000000,?applicationInfo.name=[Gesture?Monitor]?edge-swipe,?applicationInfo.token=<null>,?touchableRegion=[-14399,-29599][14400,29600],?ownerPid=762,?ownerUid=10099,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????2:?name='StrictModeFlash',?id=93,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_VISIBLE?|?NOT_FOCUSABLE?|?NOT_TOUCHABLE?|?PREVENT_SPLITTING?|?TRUSTED_OVERLAY,?alpha=1.00,?frame=[0,0][1440,2960],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=<empty>,?ownerPid=0,?ownerUid=0,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????3:?name='4b4d6f1?PointerLocation?-?display?0',?id=49,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_FOCUSABLE?|?NOT_TOUCHABLE?|?PREVENT_SPLITTING?|?TRUSTED_OVERLAY,?alpha=1.00,?frame=[0,0][1440,2960],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=<empty>,?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????4:?name='6f6f2e3?NavigationBar0',?id=86,?displayId=0,?inputConfig=NOT_FOCUSABLE?|?TRUSTED_OVERLAY?|?WATCH_OUTSIDE_TOUCH,?alpha=1.00,?frame=[0,2792][1440,2960],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=<empty>,?ownerPid=762,?ownerUid=10099,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(TRANSLATE)
????????????1.0000??0.0000??-0.0000
????????????0.0000??1.0000??-2792.0000
????????????0.0000??0.0000??1.0000
??????5:?name='1afd988?StatusBar',?id=87,?displayId=0,?inputConfig=NOT_FOCUSABLE?|?TRUSTED_OVERLAY,?alpha=1.00,?frame=[0,0][1440,84],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[0,0][1440,84],?ownerPid=762,?ownerUid=10099,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????6:?name='recents_animation_input_consumer',?id=101,?displayId=0,?inputConfig=NOT_VISIBLE?|?TRUSTED_OVERLAY,?alpha=1.00,?frame=[0,0][1440,2960],?globalScale=1.000000,?applicationInfo.name=recents_animation_input_consumer,?applicationInfo.token=0x77cb0493d7d0,?touchableRegion=[0,0][1440,2960],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????7:?name='99d71b?InputMethod',?id=278,?displayId=0,?inputConfig=NOT_FOCUSABLE?|?TRUSTED_OVERLAY,?alpha=1.00,?frame=[0,84][1440,2960],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[0,1759][1440,2960],?ownerPid=1194,?ownerUid=10081,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(TRANSLATE)
????????????1.0000??-0.0000??0.0000
????????????-0.0000??1.0000??-84.0000
????????????0.0000??0.0000??1.0000
??????8:?name='313a198?com.android.quicksearchbox/com.android.quicksearchbox.SearchActivity',?id=273,?displayId=0,?inputConfig=0x0,?alpha=1.00,?frame=[0,0][1440,2960],?globalScale=1.000000,?applicationInfo.name=ActivityRecord{49e3140?u0?com.android.quicksearchbox/.SearchActivity}?t439},?applicationInfo.token=0x77cb04980b50,?touchableRegion=[0,0][1440,2960],?ownerPid=1441,?ownerUid=10084,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????9:?name='c6a010e?ActivityRecordInputSink?com.android.quicksearchbox/.SearchActivity',?id=120,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_FOCUSABLE,?alpha=1.00,?frame=[0,0][0,0],?globalScale=0.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[-14399,-29599][14400,29600],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????10:?name='efb17ce?ActivityRecordInputSink?com.android.camera2/com.android.camera.CameraActivity',?id=141,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_VISIBLE?|?NOT_FOCUSABLE?|?NOT_TOUCHABLE,?alpha=1.00,?frame=[0,0][0,0],?globalScale=0.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[-14399,-29599][14400,29600],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????11:?name='8dd0f70?ActivityRecordInputSink?com.android.settings/.SubSettings',?id=213,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_VISIBLE?|?NOT_FOCUSABLE?|?NOT_TOUCHABLE,?alpha=1.00,?frame=[0,0][0,0],?globalScale=0.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[0,0][1440,2960],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????12:?name='214bf5f?ActivityRecordInputSink?com.android.settings/.SubSettings',?id=196,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_VISIBLE?|?NOT_FOCUSABLE?|?NOT_TOUCHABLE,?alpha=1.00,?frame=[0,0][0,0],?globalScale=0.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[0,0][1440,2960],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????13:?name='2001b8f?ActivityRecordInputSink?com.android.settings/.homepage.SettingsHomepageActivity',?id=178,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_VISIBLE?|?NOT_FOCUSABLE?|?NOT_TOUCHABLE,?alpha=1.00,?frame=[0,0][0,0],?globalScale=0.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[0,0][1440,2960],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????14:?name='edb3266?com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher',?id=266,?displayId=0,?inputConfig=DUPLICATE_TOUCH_TO_WALLPAPER,?alpha=1.00,?frame=[0,0][1440,2960],?globalScale=1.000000,?applicationInfo.name=ActivityRecord{c22322a?u0?com.android.launcher3/.uioverrides.QuickstepLauncher}?t437},?applicationInfo.token=0x77cb049417f0,?touchableRegion=[0,0][1440,2960],?ownerPid=1047,?ownerUid=10097,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????15:?name='91a1ad2?ActivityRecordInputSink?com.android.launcher3/.uioverrides.QuickstepLauncher',?id=109,?displayId=0,?inputConfig=NO_INPUT_CHANNEL?|?NOT_FOCUSABLE,?alpha=1.00,?frame=[0,0][0,0],?globalScale=0.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=[-14399,-29599][14400,29600],?ownerPid=572,?ownerUid=1000,?dispatchingTimeout=0ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(IDENTITY)
??????16:?name='Wallpaper?BBQ?wrapper#79',?id=79,?displayId=0,?inputConfig=NO_INPUT_CHANNEL,?alpha=1.00,?frame=[-71,-147][1760,3108],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=<empty>,?ownerPid=762,?ownerUid=10099,?dispatchingTimeout=5000ms,?hasToken=false,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(SCALE?TRANSLATE)
????????????0.5160??-0.0000??37.1499
????????????-0.0000??0.5160??76.3636
????????????0.0000??0.0000??1.0000
??????17:?name='b2dd605?com.android.systemui.ImageWallpaper',?id=78,?displayId=0,?inputConfig=NOT_FOCUSABLE?|?NOT_TOUCHABLE?|?PREVENT_SPLITTING?|?IS_WALLPAPER,?alpha=1.00,?frame=[-71,-147][-71,-147],?globalScale=1.000000,?applicationInfo.name=,?applicationInfo.token=<null>,?touchableRegion=<empty>,?ownerPid=762,?ownerUid=10099,?dispatchingTimeout=5000ms,?hasToken=true,?touchOcclusionMode=BLOCK_UNTRUSTED
????????transform?(ROT_0)?(SCALE?TRANSLATE)
????????????0.5160??-0.0000??37.1499
????????????-0.0000??0.5160??76.3636
????????????0.0000??0.0000??1.0000

上面是所有的觸摸window的在input中的情況,我們重點關(guān)注是InputMethod這個窗口:

7: name='99d71b InputMethod', id=278, displayId=0, inputConfig=NOT_FOCUSABLE | TRUSTED_OVERLAY, alpha=1.00, frame=[0,84][1440,2960], globalScale=1.000000, applicationInfo.name=, applicationInfo.token=, touchableRegion=[0,1759][1440,2960], ownerPid=1194, ownerUid=10081, dispatchingTimeout=5000ms, hasToken=true, touchOcclusionMode=BLOCK_UNTRUSTED ? ? ? ?transform (ROT_0) (TRANSLATE) ? ? ? ? ? ?1.0000 ?-0.0000 ?0.0000 ? ? ? ? ? ?-0.0000 ?1.0000 ?-84.0000 ? ? ? ? ? ?0.0000 ?0.0000 ?1.0000

可以看到的它的畫面大小確實是frame=[0,84][1440,2960],但是有一個touchableRegion=[0,1759][1440,2960],這個區(qū)域才是真正的觸摸區(qū)域,這里我們就看出了貓膩,這里y是從1759的位置才開始可以觸摸了,也就是我們上面看到的輸入法的鍵盤區(qū)域。 即這個touchableRegion就解答了為啥上部分區(qū)域觸摸事件沒有給輸入法窗口,因為輸入法窗口觸摸區(qū)域就不包含那一部分,所以觸摸事件在上部分區(qū)域就會繼續(xù)傳遞到下面的窗口即Activity窗口。 那么問題來了請問這個touchableRegion是在哪里進行的設(shè)置呢?

3、touchableRegion設(shè)置追蹤

這里我們知道一般input中的window是由InputMonitor設(shè)置的: frameworks/base/services/core/java/com/android/server/wm/InputMonitor.java 中搜索到如下類似代碼:

????????????inputWindowHandle.setTouchableRegion(mTmpRegion);

在這個方法加入對應(yīng)的堆棧打印 frameworks/base/services/core/java/com/android/server/wm/InputWindowHandleWrapper.java

???void?setTouchableRegion(Region?region)?{
????????if?(mHandle.touchableRegion.equals(region))?{
????????????return;
????????}
??????if?(region.getBounds().top?>?1000)?{
????????????android.util.Log.i("lsm111","setTouchableRegion?"?+?region?+?"?mHandle?=?"+mHandle,new?Exception());
???????}
????????mHandle.touchableRegion.set(region);
????????mChanged?=?true;
????}

相關(guān)的堆棧setTouchableRegion

*?daemon?started?successfully
---------?beginning?of?main
09-15?11:59:46.669???572???593?I?lsm111??:?setTouchableRegion?SkRegion((0,1675,1440,2876))
09-15?11:59:46.669???572???593?I?lsm111??:?java.lang.Exception
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputWindowHandleWrapper.setTouchableRegion(InputWindowHandleWrapper.java:146)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputMonitor.populateInputWindowHandle(InputMonitor.java:315)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputMonitor$UpdateInputForAllWindowsConsumer.accept(InputMonitor.java:636)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputMonitor$UpdateInputForAllWindowsConsumer.accept(InputMonitor.java:508)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer$ForAllWindowsConsumerWrapper.apply(WindowContainer.java:2624)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer$ForAllWindowsConsumerWrapper.apply(WindowContainer.java:2614)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowState.applyInOrderWithImeWindows(WindowState.java:4903)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowState.forAllWindows(WindowState.java:4747)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.DisplayContent$ImeContainer.forAllWindowForce(DisplayContent.java:5175)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.DisplayContent.forAllImeWindows(DisplayContent.java:2814)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowState.applyImeWindowsIfNeeded(WindowState.java:4896)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowState.applyInOrderWithImeWindows(WindowState.java:4902)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowState.forAllWindows(WindowState.java:4747)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1611)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1628)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputMonitor$UpdateInputForAllWindowsConsumer.updateInputWindows(InputMonitor.java:548)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputMonitor$UpdateInputForAllWindowsConsumer.-$$Nest$mupdateInputWindows(Unknown?Source:0)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.wm.InputMonitor$UpdateInputWindows.run(InputMonitor.java:134)
09-15?11:59:46.669???572???593?I?lsm111??:??at?android.os.Handler.handleCallback(Handler.java:942)
09-15?11:59:46.669???572???593?I?lsm111??:??at?android.os.Handler.dispatchMessage(Handler.java:99)
09-15?11:59:46.669???572???593?I?lsm111??:??at?android.os.Looper.loopOnce(Looper.java:201)
09-15?11:59:46.669???572???593?I?lsm111??:??at?android.os.Looper.loop(Looper.java:288)
09-15?11:59:46.669???572???593?I?lsm111??:??at?android.os.HandlerThread.run(HandlerThread.java:67)
09-15?11:59:46.669???572???593?I?lsm111??:??at?com.android.server.ServiceThread.run(ServiceThread.java:44)

可以看出這里的setTouchableRegion設(shè)置是由觸發(fā) InputMonitor$UpdateInputForAllWindowsConsumer.updateInputWindows

那么Region來自哪里呢?

???if?(!useSurfaceBoundsAsTouchRegion)?{
???//實際是調(diào)用了WindowState的getSurfaceTouchableRegion方法
????????????w.getSurfaceTouchableRegion(mTmpRegion,?w.mAttrs);
????????????inputWindowHandle.setTouchableRegion(mTmpRegion);
????????}

這里又回調(diào)用到WindowState的getTouchableRegion方法:

????/**?Get?the?touchable?region?in?global?coordinates.?*/
????void?getTouchableRegion(Region?outRegion)?{
????????final?Rect?frame?=?mWindowFrames.mFrame;
????????switch?(mTouchableInsets)?{//關(guān)鍵的mTouchableInsets決定取哪個區(qū)域
????????????default:
????????????case?TOUCHABLE_INSETS_FRAME:
????????????????outRegion.set(frame);
????????????????break;
????????????case?TOUCHABLE_INSETS_CONTENT:
????????????????applyInsets(outRegion,?frame,?mGivenContentInsets);
????????????????break;
????????????case?TOUCHABLE_INSETS_VISIBLE:
????????????????applyInsets(outRegion,?frame,?mGivenVisibleInsets);
????????????????break;
????????????case?TOUCHABLE_INSETS_REGION:?{//輸入法執(zhí)行到這里
????????????????outRegion.set(mGivenTouchableRegion);
????????????????if?(frame.left?!=?0?||?frame.top?!=?0)?{
????????????????????outRegion.translate(frame.left,?frame.top);
????????????????}
????????????????break;
????????????}
????????}
????????cropRegionToRootTaskBoundsIfNeeded(outRegion);
????????subtractTouchExcludeRegionIfNeeded(outRegion);
????}

問題就是mGivenTouchableRegion來自哪里?哈哈這里經(jīng)過尋找發(fā)現(xiàn)在WindowManagerService進行賦值的,具體堆棧如下:

09-15?16:09:34.367???551??1330?I?lsm111??:?Window{e201e2f?u0?InputMethod}?touchableRegion?=?SkRegion((0,1675,1440,2876))
09-15?16:09:34.367???551??1330?I?lsm111??:?java.lang.Exception
09-15?16:09:34.367???551??1330?I?lsm111??:??at?com.android.server.wm.WindowManagerService.setInsetsWindow(WindowManagerService.java:2165)
09-15?16:09:34.367???551??1330?I?lsm111??:??at?com.android.server.wm.Session.setInsets(Session.java:279)
09-15?16:09:34.367???551??1330?I?lsm111??:??at?android.view.IWindowSession$Stub.onTransact(IWindowSession.java:813)
09-15?16:09:34.367???551??1330?I?lsm111??:??at?com.android.server.wm.Session.onTransact(Session.java:175)
09-15?16:09:34.367???551??1330?I?lsm111??:??at?android.os.Binder.execTransactInternal(Binder.java:1285)
09-15?16:09:34.367???551??1330?I?lsm111??:??at?android.os.Binder.execTransact(Binder.java:1244)

是客戶端發(fā)起的調(diào)用設(shè)置的Inset,這里就相當(dāng)于到了Inset部分了,和類是狀態(tài)欄,導(dǎo)航欄那個是一回事,在這就不深入分析了。

引用鏈接

[1] 需要試看課程的可以點擊這里:https://www.bilibili.com/video/BV1YS4y1K7rj/: https://www.bilibili.com/video/BV1YS4y1K7rj/


InputMethodManager輸入法窗口為啥dumpsys是全屏?千里馬帶你疑難解惑輸入法相關(guān)的評論 (共 條)

分享到微博請遵守國家法律
墨竹工卡县| 潼关县| 游戏| 成武县| 宁陕县| 霍州市| 雅安市| 盈江县| 湟源县| 隆林| 明星| 京山县| 泰和县| 常宁市| 大石桥市| 商河县| 若羌县| 呼伦贝尔市| 武夷山市| 嘉鱼县| 化德县| 库伦旗| 永安市| 紫金县| 大宁县| 濮阳县| 金堂县| 永泰县| 本溪| 庆元县| 靖江市| 密云县| 连州市| 衡阳县| 广饶县| 怀来县| 恩平市| 图片| 松溪县| 阿克苏市| 库尔勒市|