最近,在开发一个应用程序时,我遇到了一个问题。我在谷歌上搜索了很多,但没有找到任何解决方案。最后我遇到了这个Android issue tracker
为了解释我的问题,我制作了一个示例应用程序。
我的示例应用程序的基本工作
我想要实现的
我是如何实现的
wasEditing = true。wasEditing = true了。wasEditing,如果是真的话,我将为EditText请求焦点。imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT,resultRec),在那里我遇到了问题,
有时,在执行此调用后,键盘在少数情况下是不可见的,例如在更改方向时。
当我放置日志时,我发现这个函数正在返回false
但是,如果我在使用showSoftInput()中的mEditText.postDelayed()时延迟了100 in进行这个onResume()调用,一切都可以正常工作。
问题,在什么情况下,此函数返回false,以及为什么延迟工作?
Note虽然我已经用延迟解决了我的问题,但是我仍然想知道为什么会这样。
发布于 2014-06-13 20:26:02
这也是我今天遇到的问题。在我的8台android设备中,只有1台有问题,而且运行的是Android4.0.4。
这个问题是通过添加
mEditText.requestFocus();
mEditText.requestFocusFromTouch();在调用mEditText.showSoftInput(.)之前
您将看到resultcode从showSoftInput现在是true。我注意到在mEditText.requestFocus()之后,isFocused()仍然是false。可能是Android4.0和4.1中的一个bug。
发布于 2019-05-24 12:02:00
在您的showKeyboard连接到窗口后,请致电mEditText。请确定你打电话的时间。
发布于 2022-11-15 08:38:50
问题:
我面对这个键盘没有出现问题。我发现下面的解决方案是受这个answer启发的,但不是他们的解决方案!简而言之,造成这种混乱的原因是请求焦点和IMM提供的服务只能在创建和激活的视图上运行。当您在创建阶段onCreate(Bundle savedInstance).. or onCreateView(LayoutInflater inflater...上执行所有这些操作,并且视图仍然处于初始化状态时,您将不会得到一个活动视图来操作!我已经看到许多解决方案使用延迟和检查来等待视图激活,然后执行显示键盘,但是下面是基于android框架工作设计的解决方案:
解决方案:
在您的活动或片段中,请确保视图具有访问权限(将其定义在活动/片段的顶部):
@Override
public void onStart() {
yourView.requestFocus();
showSoftKeyboard(yourView);
super.onStart();
}
public void showSoftKeyboard(View view) {
if(view.requestFocus()){
InputMethodManager imm = (InputMethodManager)
mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
}https://stackoverflow.com/questions/23380123
复制相似问题