gpt4 book ai didi

android - 为什么 android InputMethodManager.showSoftInput() 返回 false?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:55 25 4
gpt4 key购买 nike

最近在开发一个应用程序时,我遇到了一个问题。我在谷歌上搜索了很多但找不到任何解决方案。最后我遇到了这个 Android issue tracker

为了解释我的问题,我制作了一个示例应用程序。

我的示例应用的基本工作

  1. 我有一个屏幕,它有一个 EditText、一个 Button 和一个 RelativeLayout。
  2. RelativeLayout 的宽度和高度为 0px。这只是一个将焦点从 EditText 移开的 View 。
  3. 当应用程序启动时,焦点在 RelativeLayout 上,而不是在 EditText 上(这样它就不会闪烁光标。)
  4. 当用户点击 Button 时,我只是使用对 RelativeLayout 的 requestFocus() 调用将焦点移至 RelativeLayout。
  5. 当用户点击 EditText 时,键盘出现。我可以在里面输入文字。

我想要实现的目标

  1. 如果我在键盘可见时更改手机方向,那么在方向更改后,键盘应该保留。
  2. 如果键盘可见并且一些其他 Activity 出现在它上面,例如警报、Facebook 聊天头像、从通知区域打开某些内容、锁定解锁设备等。然后在返回到示例应用程序时,键盘应该是可见的。

我是如何做到这一点的

  1. 在 onSaveInstanceState() 中,我检查焦点是否在 EditText 上,然后在 Bundle 中放置一个 bool 变量。
  2. 在 onStop() 中,我设置了一个 bool 值标记 wasEditing = true
  3. 在 onRestoreInstanceState() 中,我检查了 Bundle 是否在 onSaveInstanceState() 中设置了标志值。如果是,那么我将 wasEditing = true
  4. 在 onResume() 中,我检查此 wasEditing,如果为真,我请求 EditText 获得焦点。
  5. 之后调用 imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT,resultRec)

哪里出了问题
有时在执行此调用后,键盘在少数情况下不可见,例如在方向更改期间。
当我放置日志时,我发现这个函数正在返回 false
但是,如果我在 onResume() 中使用 mEditText.postDelayed() 进行此 showSoftInput() 调用并延迟 100 毫秒,一切正常。

问题在什么情况下此函数返回 false 以及延迟为何起作用?

注意虽然我已经使用延迟解决了我的问题,但我仍然想知道为什么它会这样。

最佳答案

这也是我今天遇到的问题。在我的 8 台安卓设备中,只有一台有问题,它运行的是 Android 4.0.4。

问题已通过添加解决

mEditText.requestFocus();
mEditText.requestFocusFromTouch();

打电话之前 mEditText.showSoftInput(...)

您会看到来自 showSoftInputresultcode 现在是 true。我注意到在 mEditText.requestFocus() 之后,isFocused() 仍然是 false。可能是 Android 4.0 和 4.1 中的错误。

关于android - 为什么 android InputMethodManager.showSoftInput() 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23380123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com