如何禁用代码中的物理键盘(始终使用虚拟键盘)

你可能会问为什么我要这样做。 原因如下:

我用我的应用程序的login屏幕条形码扫描仪。 然而,连接条形码扫描器将迫使我的平板电脑使用物理键盘(它认为扫描仪是键盘),并防止虚拟键盘(我想要的其他一些屏幕)。 我必须手动点击系统栏来禁用虚拟键盘的物理键盘才能popup。

那么,有没有办法在代码中禁用物理键盘,或者即使连接了一些“键盘”,也可以使虚拟键盘出现?

Related of "如何禁用代码中的物理键盘(始终使用虚拟键盘)"

尝试以下

Settings > Language & Input >在Keyboard and input methods点击Default 。 是否有一个选项来取消或禁用硬件/物理键盘?

这是违反直觉的,但在这样做之后,我可以同时使用物理键盘和我的设备上的虚拟键盘(Android 4.2)

这似乎有一些你的案件的背叛。 从configuration类文档。

public int hardKeyboardHidden —在API级别3中添加

一个表示硬键盘是否被隐藏的标志。 这将被设置在具有用于在用户隐藏键盘的机制的设备上,当该机制closures时。 其中之一:HARDKEYBOARDHIDDEN_NO,HARDKEYBOARDHIDDEN_YES。

您可以对此configuration更改采取一些操作。 但我认为没有办法在Android中禁用物理键盘。

更新

在那里 , mHardKeyboardSwitch是一个私有成员,它持有对SwitchView的引用,用来反映用户的硬件键盘偏好。 它不能用于禁用硬件键盘,因为它不能在该类之外访问。

我认为你可以在你的清单文件中指定在softinputmode上使用,并处理键盘的configuration更改| keyboard_hidden

是的,条形码扫描器被检测为物理键盘。 当键盘连接到设备时,默认情况下软键盘被禁用。 要启用它,我们需要closures硬件键盘通过:

设置>语言和input>selectinput法

选项名称可能因设备而异。 即使我们将其closures,我们也可以使用扫描仪和软键盘。

而且,目前还没有办法通过编程来实现这一点。 我们可以做的最多的是检测何时连接了扫描仪/键盘,并通过重写onConfigurationChanged方法来redirect用户到input方法select窗口:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)) .showInputMethodPicker(); Toast.makeText(this, "Barcode Scanner detected. Please turn OFF Hardware/Physical keyboard to enable softkeyboard to function.", Toast.LENGTH_LONG).show(); } } 

您可以修改和重buildAFS。 打开位于mydroid / frameworks / base / services / java / com / android / server / wm中的WindowManagerService.java

find像这样的行:

 if (hardKeyboardAvailable != mHardKeyboardAvailable) { mHardKeyboardAvailable = hardKeyboardAvailable; mHardKeyboardEnabled = hardKeyboardAvailable; mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE); mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE); } 

并将3行replace为mHardKeyboardEnabled = false;