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

你可能会问为什么我想要那个。 原因如下:

我在我的应用程序的登录屏幕上使用条形码扫描仪。 但是,连接条形码扫描仪将迫使我的平板电脑使用物理键盘(它认为扫描仪是键盘),这会阻止虚拟键盘出现(我想要其他一些屏幕)。 我必须手动单击系统栏以禁用popup虚拟键盘的物理键盘。

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

Solutions Collecting From Web of "如何在代码中禁用物理键盘(始终使用虚拟键盘)"

请尝试以下方法

Settings > Language & Input >在Keyboard and input methods单击Default 。 是否可以选择取消选中或禁用硬件/物理键盘?

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

这似乎对你的案件有一些启示。 从Configuration类文档。

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

指示硬键盘是否已隐藏的标志。 这将在具有机制的设备上设置,该机制在该机制关闭时隐藏用户的键盘。 其中之一:HARDKEYBOARDHIDDEN_NO,HARDKEYBOARDHIDDEN_YES。

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

更新

mHardKeyboardSwitch是一个私有成员,它拥有对SwitchView的引用,用于反映用户的硬件键盘首选项。 它不能用于禁用硬件键盘,因为它无法在该类之外访问。

我认为你可以在你的软件输入模式中指定要使用的清单文件,并为键盘| keyboard_hidden处理配置更改

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

设置>语言和输入>选择输入法

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

不,目前无法以编程方式完成此任务。 我们所能做的最多就是检测连接扫描仪/键盘的时间并将用户重定向到输入法选择窗口,方法是重写onConfigurationChanged方法,如下所示:

 @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(); } } 

您可以修改和重建AFS。 打开位于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行替换为mHardKeyboardEnabled = false;