关于键盘:Android软键盘永远不会出现在模拟器中

Android softkeyboard never shows up in emulator

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

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

我试过了:

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

和:

1
2
3
4
5
6
7
8
9
10
11
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);

         }
     });

我也尝试过:

1
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

我尝试将此行放入AndroidManifest.xml文件中:

1
 android:windowSoftInputMode="stateVisible|adjustResize"

但一切都是徒劳的。 它永远不会显示。 我错过了什么?


您需要确保您的模拟器未设置为使用硬件键盘。这可以通过在AVD中选定的仿真器上选择Edit来完成。然后取消选中Hardware keyboard present设置。

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

要在Genymotion中禁用硬件键盘:
转到Settings - > Language & input并打开Keyboard & Input Methods下的Default项。有一个Hardware设置,您可以打开/关闭。当它打开时,您使用物理键盘,当它关闭时,只要文本字段获得焦点,就会弹出标准软键盘。

Genymotion设置的屏幕截图:
Default Item

enter image description here


在2.1.1版中
- 单击您的虚拟设备设置
- 然后选择"使用虚拟键盘输入"复选框。
enter image description here

enter image description here


在AS 1.1.0中有两个地方取消选择硬件键盘。这还不够:

enter image description here

必须这样做(单击Tools | Android | AVD Manager;然后创建新的或编辑旧的AVD,然后单击Show Advanced Settings;向下滚动并清除Enable keyboard input):

enter image description here


为Android Studio 2+仿??真器启用屏幕软键盘的方法取决于仿真器的API级别。我已经测试了从API 15开始的各种方法,并记录了以下步骤。

[A] API 15,17,19和21。

以下步骤将启用屏幕上的软键盘,但将禁用使用硬件计算机键盘输入文本和与AVD交互的功能。

  • 在Android虚拟设备管理器(AVD)中,单击要使用的设备的编辑操作
  • 单击"显示高级设置",然后向下滚动到页面底部的"键盘"部分
  • 取消选中"启用键盘输入"选项
  • [B] API 22

    无论您使用硬件键盘设置如何操作,都会显示软键盘。如果您希望在软键盘旁边启用硬件键盘支持,

  • 在AVD中,单击的编辑操作
    您希望使用的设备
  • 单击"显示高级设置",然后向下滚动到底部
    页面到"键盘"部分
  • 选中"启用键盘输入"选项
  • [C] API 23

    如果你想使用硬件和软键盘,那么......

  • 按照[B]步骤1至3进行操作
  • 在虚拟设备上,启动设置,然后选择语言和输入/当前键盘
  • 启用硬件 - 显示输入法
  • 如果您不需要硬件键盘,请在AVD高级设置中取消选中"启用键盘输入"选项。您无需更改虚拟设备上的任何设置。

    [D] API 24和25

  • 按照[B]上面的步骤1到3,选中或取消选中"启用"
    键盘输入"选项取决于您是否要启用hardqare键盘。
  • 在虚拟设备上,启动设置,然后选择语言和输入/物理键盘
  • 启用"显示虚拟键盘"
  • 如果在AVD中选择了启用键盘输入选项,那么您现在可以使用硬键盘输入和软键盘输入。如果取消选中AVD中的选项,则无论如何都会显示软键盘。

    [E] API 26

    与[D] API 24和25完全相同,除了在进入语言和输入/物理键盘之前需要在设备设置中浏览其他"系统"菜单级别


    可能是你的模拟器不支持软键盘..

    添加硬件属性键盘支持,并为您的模拟器设置为true。

    如果已经是真的那么请检查这个答案。


    显示:

    1
    2
    3
    4
    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);

    隐藏:

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

    试试这个......