Это оказывается очень выполнимым, и мои первоначальные проблемы, вероятно, были связаны с новизной в Android (это мое первое приложение для Android), а не с KeyboardView. В частности, я привык к тому, что видимость - это простое двоичное свойство.
В любом случае:
- Объявите
KeyboardView
в вашем XML-файле с android:visibility="gone"
.
- Прежде чем сделать вид видимым, позвоните
setKeyboard()
, чтобы подключить клавиатуру. Это важно, поскольку KeyboardView
получает свой размер с клавиатуры.
- Чтобы получить необработанные ключевые события, позвоните
KeyboardView.setOnKeyboardActionListener()
. После рефакторинга этой функциональности с Dialog
обратно на мой основной View
я поместил функциональность OnKeyboardActionListener
в отдельный класс, но это не обязательно.
- Я звоню
keyboardView.setEnabled(true);
. Кажется, это не необходимо , но я не уверен (пока), при каких обстоятельствах это будет иметь значение; возможно только если вы позвоните setEnabled(false)
.
- Я звоню
keyboardView.setPreviewEnabled(true);
- это особенно полезно, если пользователь не будет получать визуальную обратную связь от ввода биокса прямо над клавиатурой.
- Затем, когда клавиатура полностью настроена, позвоните
keyboardView.setVisibility(VISIBLE);
.
Чтобы скрыть клавиатуру при необходимости, просто наберите keyboardView.setVisibility(GONE);
. Чтобы сменить клавиатуру (как на клавише Shift или на клавиатуре с циклическим изменением символа, просто вызовите setKeyboard
снова. Я использую Map<<Integer, Keyboard>
для реализации шаблона отложенного создания; слабая ссылка может быть желательно, если программа будет работать долго и клавиатура не будет сильно использоваться.