Как отключить физическую клавиатуру в коде (все время используйте виртуальную клавиатуру) - PullRequest
21 голосов
/ 16 ноября 2011

Вы можете спросить, почему я этого хочу.Вот причина:

Я использовал сканер штрих-кода для экрана входа в приложение.Однако подключение сканера штрих-кода вынудит мой планшет использовать физическую клавиатуру (она считает, что сканер - это клавиатура), и это препятствует появлению виртуальной клавиатуры (что я хочу для некоторых других экранов).Я должен вручную нажать на системную панель, чтобы отключить физическую клавиатуру, чтобы виртуальная клавиатура всплывала.

Итак, есть ли способ отключить физическую клавиатуру в коде или заставить виртуальную клавиатуру работать, даже если некоторые"клавиатура" подключена?

Ответы [ 5 ]

7 голосов
/ 30 ноября 2012

Попробуйте следующее

Settings> Language & Input> Под Keyboard and input methods нажмите Default.Можно ли снять или отключить аппаратную / физическую клавиатуру?

Это противоречит интуиции, но после этого на моем устройстве можно использовать как физическую, так и виртуальную клавиатуру (Android 4.2)

3 голосов
/ 18 июня 2014

Да, сканер штрих-кода определяется как физическая клавиатура.Когда к устройству подключена клавиатура, по умолчанию программная клавиатура отключена.Чтобы включить его, нам необходимо отключить аппаратную клавиатуру с помощью:

Настройки> Язык и ввод> Выбрать способ ввода

Имя параметра может отличаться в зависимости от устройства.Мы сможем использовать сканер вместе с программной клавиатурой, даже если выключим его.

И НЕТ, в настоящее время нет способа сделать это программным путем.Максимум, что мы можем сделать, это обнаружить, когда подключен сканер / клавиатура, и перенаправить пользователя в окно выбора метода ввода, переопределив метод 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();
  }
}
3 голосов
/ 24 ноября 2012

Это, похоже, имеет некоторое отношение к вашему делу. Из документации Configuration class.

public int hardKeyboardHidden --- Добавлено на уровне API 3

Флаг, указывающий, имеет ли жесткая клавиатура был скрыт Это будет установлено на устройстве с механизмом скрытия клавиатура от пользователя, когда этот механизм закрыт. Один из: HARDKEYBOARDHIDDEN_NO, HARDKEYBOARDHIDDEN_YES.

Вы можете предпринять некоторые действия для этого изменения конфигурации. Но я думаю, что нет способа отключить физическую клавиатуру в Android.

Обновление

Там mHardKeyboardSwitch - это закрытый член, который содержит ссылку на SwitchView, которая используется для отражения предпочтений клавиатуры пользователя. Его нельзя использовать для отключения аппаратной клавиатуры, поскольку к нему нельзя получить доступ за пределами этого класса.

2 голосов
/ 28 ноября 2012

Я думаю, что вы можете указать в файле манифеста для использования в softinputmode и обработать изменение конфигурации для клавиатуры | keyboard_hidden

0 голосов
/ 26 февраля 2015

Вы можете изменить и перестроить AFS. Откройте WindowManagerService.java, который находится в mydroid / frameworks / base / services / java / com / android / server / wm

Найдите такие строки:

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;

...