安卓模拟器中软键盘从未显示出来

87

我是 Android 新手。 我已经花了两个小时在搜索上。无论我尝试什么,软键盘都不会显示在我的 EditText 上。我只是简单地创建了它:

EditText editText = (EditText)findViewById(R.id.editText);

我尝试过:

 editText.requestFocus();//i tried without this line too
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

并且:

editText.setOnFocusChangeListener(new OnFocusChangeListener() {

         @Override
         public void onFocusChange(View v, boolean hasFocus) 
         {    

                     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

         }
     });

我也尝试了:

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

我尝试将这行代码放入AndroidManifest.xml文件中:

 android:windowSoftInputMode="stateVisible|adjustResize"

但一切都是徒劳的。它就是从来没有出现过。我缺少了什么?


键盘是否在其他应用程序中打开? - Niranj Patel
尝试将 imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 替换为 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); - Aravin
@CapDroid 不好意思,我在另一个应用程序中尝试了,但仍然没有成功。 - Andrey Chernukha
@Aravinth 仍然无法工作。 - Andrey Chernukha
你是在使用模拟器还是设备? - Aravin
@AndreyChernukha 使用AVD管理器添加一个硬件属性键盘支持,并将其设置为true。 - Niranj Patel
6个回答

212

您需要确保模拟器未设置使用硬件键盘。您可以通过在AVD中选择所选模拟器上的编辑(Edit),然后取消选中Hardware keyboard present来完成此操作。

您还可以尝试使用其他模拟器,例如Genymotion。它支持全面的硬件加速(多核 CPU以及 GPU),比任何 Android 模拟器镜像都要快得多。如果您使用 Genymotion,则需要在 Android 中禁用硬件键盘(有关详细信息,请参见下文)。

在 Genymotion 中禁用硬件键盘:
转到设置(Settings) -> 语言和输入(Language & input)并打开键盘和输入方法(Keyboard & Input Methods)下的默认(Default)项目。那里有一个硬件(Hardware)设置,您可以切换开/关。当它开启(on)时,您将使用物理键盘,而当它关闭(off)时,标准软键盘应该在文本字段获得焦点时弹出。

Genymotion 设置截图: 默认项目

输入图像描述


4
终于!非常感谢。我希望我能为你的答案点赞两次。至于Genymotion - 我曾经花了一整天时间尝试安装它,但它始终无法工作。我甚至无法向他们的支持团队发信息。 - Andrey Chernukha
很高兴能帮忙 :) 至于Genymotion,他们一直在不断改进,但它仍然是预览/测试版。然而,自从我开始使用它以来,我没有遇到过任何问题。可能是因为我刚开始使用时他们已经解决了大部分问题 - 或者我只是幸运 :). 话虽如此,Android模拟器提供更多的变化,所以我仍然使用它们来测试兼容性。 - free3dom
太好了,现在我有虚拟键盘了!但是我有一个带有android:inputType="numberDecimal">的EditText,虚拟键盘不会输入数字(只有在我在它们之前写一个字母时才会输入)。拼写检查已经关闭了... - Michele
请查看这里以获取可能的解决方案。 - free3dom
我猜这取决于Android目标API。在4.1.1中它不会显示出来。 - IgorGanapolsky
显示剩余3条评论

73
在2.1.1版本中: - 点击您的虚拟设备设置 - 然后选中“使用虚拟键盘输入”复选框。 输入图像描述在这里

输入图像描述在这里


3
启用Android Studio 2+模拟器上屏软键盘的方法取决于模拟器的API级别。 我已经测试了从API 15开始的各种方法,并记录了以下步骤。
[A] APIs 15, 17, 19和21。
以下步骤将启用屏幕软键盘,但将禁用使用硬件计算机键盘输入文本并与AVD交互的功能。
1. 在Android虚拟设备管理器(AVD)中,单击要使用的设备的编辑操作。 2. 单击“ 显示高级设置”并向右滚动到页面底部的“ 键盘”部分。 3. 取消选中“ 启用键盘输入”选项。
[B] API 22
无论您如何设置硬件键盘设置,软键盘都会显示。 如果您希望在软键盘旁边启用硬件键盘支持,则:
1. 在AVD中,单击要使用的设备的编辑操作。 2. 单击“ 显示高级设置”并向右滚动到页面底部的“ 键盘”部分。 3. 选中“ 启用键盘输入”选项。
[C] API 23
如果您希望使用硬件和软键盘,则...
1. 按照[B]步骤1至3进行操作。 2. 在虚拟设备上,启动“ 设置”,然后选择“ 语言和输入/当前键盘”。 3. 启用硬件-显示输入法。
如果您不需要硬件键盘,请在AVD高级设置中取消选中“ 启用键盘输入”选项。 您无需更改虚拟设备上的任何设置。
[D] APIs 24和25
按照[B]上述步骤1至3,根据是否要启用硬件键盘来选中或取消选中“ 启用键盘输入”选项。
在虚拟设备上,启动“ 设置”,然后选择“ 语言和输入/物理键盘”。
启用“ 显示虚拟键盘”。
如果在AVD中选择了“ 启用键盘输入”选项,则现在可以使用硬件和软件键盘输入。 如果在AVD中取消选中该选项,则将显示软键盘。
[E] API 26
与[D] APIs 24和25完全相同,只是您需要在设备设置中通过一个额外的“ 系统”菜单级别才能到达“ 语言和输入/物理键盘”。

2
在AS 1.1.0中有两个地方可以取消选择硬件键盘,但这一个不够用: enter image description here 必须这样操作(点击“工具 | Android | AVD管理器”;然后创建新的或编辑旧的AVD,接着点击“显示高级设置”;向下滚动并清除“启用键盘输入”): enter image description here

我花了一些时间找到这个解决方案,因为滚动指示器通常会消失,只有在开始滚动时才会出现。如果一个视图是可滚动的,我建议在视觉上有一些指示。 - GregM
在Android Studio中对我无效。我取消选中“启用键盘输入”,但模拟器仍然不显示软键盘。 - Evgenii
您只提到了一个“取消选中”的选项。另一个是“具有硬件键盘”,如下所示 - 你可能已经清除它了。也许尝试使用其他虚拟设备?我发现AS模拟器非常难以忍受。加载缓慢,还有这样的小毛病……祝好运! - DSlomer64

1
展示:
EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

并且要隐藏:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

只需尝试这个....

(保留HTML标记)

很遗憾,它没有帮助。 - Andrey Chernukha
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);...尝试一下这个。 - FarhaSameer786
@Andrey Chernukha - 我认为你的模拟器不支持软键盘或模拟器的硬件出现了问题... - FarhaSameer786

1
也许您的模拟器不支持软键盘。
为您的模拟器添加硬件属性“键盘支持”,并将其设置为true。
如果已经是true,请查看此答案

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接