我想在 EditText
聚焦时自动显示软键盘(如果设备没有物理键盘),我有两个问题:
-
当我显示
Activity
时,我的EditText
已聚焦但键盘未显示,我需要再次单击它以显示键盘(显示我的Activity
时应显示) . -
当我在键盘上单击完成时,键盘被解除但是
EditText
保持聚焦并且不想要(因为我的编辑完成了) .
要恢复,我的问题是在iPhone上有更多类似的东西:它使键盘与我的 EditText
状态保持同步(聚焦/不聚焦),当然如果有物理键盘,则不会出现软键盘 .
30 回答
showSoftInput
根本不适合我 .我想我需要设置输入模式:(此处在清单中的Activity组件中)
对于片段,确定它的工作:
相信与否,当我发现活动动画可以禁用软键盘时,解决了我的软键盘问题 . 当你用the调用intent时
和
它可以隐藏软键盘,没有办法显示它 .
我将所有内容组合在一起,对我来说它有效:
要强制显示软键盘,您可以使用
为了消除对
EditText
的关注,遗憾的是你需要一个虚拟View
来 grab 焦点 .我希望这有帮助
要关闭它你可以使用
这适用于在对话框中使用它
我有同样的问题 . 在editText VISIBILITY从GONE更改为VISIBLE后,我不得不设置焦点并显示软键盘 . 我使用以下代码实现了这一点:
它适用于100毫秒延迟,但没有任何延迟或仅延迟1毫秒失败 .
代码的注释部分显示了另一种方法,该方法仅适用于某些设备 . 我在OS 2.2版(仿真器),2.2.1(真实设备)和1.6(仿真器)上进行了测试 .
这种方法给我带来了很多痛苦 .
要使键盘出现,请使用
此方法比直接调用InputMethodManager更可靠 .
要关闭它,请使用
以下代码是从Google 4.1的SearchView源代码中掠夺的 . 似乎工作,在较小版本的Android上也很好 .
然后,在创建Control / Activity时,需要添加以下代码 . (在我的例子中,它是一个复合控件,而不是一个活动) .
没有别的办法, force it to be shown :
android:windowSoftInputMode="stateAlwaysVisible"
- >在清单文件中 .edittext.requestFocus();
- >在代码中 .这将打开软键盘,当活动出现时,编辑文本会请求焦点 .
我在最近的一些简单案例中运用了下面的代码 . 我还没有完成所有测试,但....
然后键盘出现了 .
您可以尝试强制显示软键盘,它适用于我:
要隐藏键盘,请使用以下键盘:
并显示键盘:
有时raukodraug的答案是行不通的 . 我用这种方式做了一些试验和错误:
和 EditText 部分:
我在各种不同的情况下遇到了同样的问题,我找到的解决方案在某些方面有效,但在其他方面不起作用,所以这里是一个联合解决方案,适用于我发现的大多数情况:
代码段 . . .
它对我有用 . 您也可以尝试使用它来显示键盘:
只需在清单文件中添加android:windowSoftInputMode =“stateHidden”...
上面给出的所有解决方案(如果您在活动中进行单个编辑,则附加到EditText的OnFocusChangeListener.onFocusChange侦听器中的InputMethodManager交互工作正常 .
在我的情况下,我有两个编辑 .
我观察到onFocusChange是针对tvX触发的,其中hasFocus = true(显示键盘)但是后来针对tvY使用hasFocus = true(键盘隐藏) . 最后,没有键盘可见 .
如果“如果EditText文本具有焦点显示键盘”,一般解决方案应该有正确的声明
在Activity的onResume()部分,你可以调用方法bringKeyboard();
在你的清单里面:
android:windowSoftInputMode="stateAlwaysVisible"
- 最初推出的键盘 .android:windowSoftInputMode="stateAlwaysHidden"
- 最初隐藏的键盘 .我也喜欢使用
"adjustPan"
因为当键盘启动时屏幕会自动调整 .我发现了一个奇怪的行为,因为在我的一个应用程序中,软键盘在进入活动时自动显示(onCreate中有一个editText.requestFocus()) .
在进一步挖掘时,我发现这是因为布局周围有一个ScrollView . 如果我删除ScrollView,行为如原始问题陈述中所述:仅在单击已经聚焦的editText时才会显示软键盘 .
如果它对您不起作用,请尝试放入ScrollView - 无论如何它都是无害的 .
我有 similar problem using view animations . 所以我在尝试在显示的edittext上请求键盘访问之前've put an animation listener to make sure I'd wait for the animation to end .
我同意raukodraug因此在swithview中你必须要求/明确焦点如下:
问候 .
使用Xamarin,这对我在片段中起作用:
我做了这个帮助课程 . 只需传递上下文和要关注的视图,然后显示键盘,然后隐藏键盘 . 我希望它有帮助 .
}
添加此行也不要忘记
您还可以创建EditText的自定义扩展,该扩展知道在获得焦点时打开软键盘 . 这就是我最终做的事情 . 这对我有用: