Отображать цифровую клавиатуру на активности без области ввода - PullRequest
2 голосов
/ 20 октября 2010

Я использую следующий код, чтобы открыть мягкую клавиатуру ввода в моей Деятельности


InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.getInputMethodList();

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

Отображает буквенную клавиатуру.

Но я хочу отобразитьцифровая клавиатура.

Обратите внимание, я знаю, что использование setInputType () работает при использовании с Edittext или TextView, но я хочу иметь возможность отображать клавиатуру без области ввода, такой как EditText, и просто слушатьКлавиша нажимается на клавиатуре.

Кто-нибудь может подтвердить, возможно ли это, и если да, то как это можно сделать?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2015

Это действительно достижимо и возможно.

TL; DR:

Переопределить onCreateInputConnection и запросить цифровую клавиатуру:

public class CustomView extends View {

    [your methods here]

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        InputConnection connection =  super.onCreateInputConnection(outAttrs);
        outAttrs.inputType |= InputType.TYPE_CLASS_NUMBER;
        return connection;
    }
}

Полное объяснение

Вы создали подкласс View, чтобы создать свой собственный вид:

public class CustomView extends View {
    [your methods here]
}

В этом пользовательском представлении вы используете InputMethodManager для отображения клавиатуры. Этот менеджер собирается делегировать ввод для InputConnection, который затем делегирует для InputMethod.

Чтобы запросить указанную цифровую клавиатуру, необходимо переопределить onCreateInputConnection, чтобы вернуть цифровую клавиатуру. Вы можете пойти на неприятности и реализовать свой собственный BaseInputConnection, или вы можете просто повторно использовать тот, который создан для вас с помощью super (в данном случае View) и установить свойство, которое вам нужно (inputType).

0 голосов
/ 20 октября 2010

попробуйте использовать методы "onKeyDown", я использую их для захвата жесткого ключа "назад" на телефонах в моем приложении, примером метода, использующего в качестве кнопки прослушивания кнопку "назад", будет

    public boolean onKeyDown(int keyCode, KeyEvent event){
      if((keyCode == KeyEvent.KEY_BACK)){
          back();
      }
         return super.onKeyDown(keyCode,event);
   }

Но вместо использования KeyEvent.KEY_BACK попробуйте использовать KeyEvent.KEYCODE_P. Я не уверен, если это будет работать на мягкой клавиатуре, но его стоит попробовать! удачи

...