Android 12 忽略 showSoftInput,因为未提供 VIEW

Mer*_*n E 3 android android-appcompat android-edittext inputmethodmanager

我的应用程序在很多设备上运行良好。但自从在我自己的 Pixel 上升级到 Android 12 后,在调用 showSoftInput 或点击 Bottomsheet 中的 AppCompatEditText 时,会发生以下情况。

val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager;
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
Run Code Online (Sandbox Code Playgroud)

Logcat 警告(应用程序中没有任何反应):

Ignoring showSoftInput() as view=androidx.appcompat.widget.AppCompatEditText{b5311a0 VFED..CL. .F.P..ID 84,0-996,118 #7f0900a7 app:id/et_bottomsheet aid=1073741827} is not served.
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法,例如请求焦点、使用 SHOW_FORCE 的 showSoftInput 但没有任何效果。

Zai*_*ain 6

从 Android 11 (API 30) 开始,您可以使用 inset 的 API show()手动强制 ime/键盘显示

myAppCompatEditText.windowInsetsController.show(WindowInsetsCompat.Type.ime())
Run Code Online (Sandbox Code Playgroud)

并将其隐藏

myAppCompatEditText.windowInsetsController.hide(WindowInsetsCompat.Type.ime())
Run Code Online (Sandbox Code Playgroud)

对于低于 API 30 的目标 API,这是使用以下Compat版本向后移植的:

WindowInsetsControllerCompat(window, myAppCompatEditText)
                                     .show(WindowInsetsCompat.Type.ime())

WindowInsetsControllerCompat(window, myAppCompatEditText)
                                     .hide(WindowInsetsCompat.Type.ime())
Run Code Online (Sandbox Code Playgroud)