Android: Non-Keyboard IME

Я пытаюсь создать IME для Android, который не является традиционной клавиатурой (строки ключей, соответствующие разным буквам), и мне не удается найти полезные ресурсы, как это сделать, поскольку все примеры кода в SDK используют API-интерфейс клавиатуры И он встроен в функции.

Я разработал интерфейс IME в XML-файле, как если бы это был просто Activity in in application, но я теряюсь в своих демонстрационных записях, поскольку их Клавиатуры – это просто объекты, которые построены из другого стиля структуры XML.

Если у кого-то есть ссылка на проект с открытым исходным кодом, который не использует традиционную структуру клавиатуры или может просто привести меня к отображению пользовательского интерфейса, который я уже построил в окне IME, я думаю, что смогу понять остальное.

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать. Заранее спасибо.

Образец SoftKeyboard на самом деле структурирован аналогично тому, что вам нужно, хотя вы этого не знаете. Давайте сломаем его – вот полный заглушка, чтобы действовать как услуга метода ввода и использовать стандартную XML-клавиатуру:

import android.inputmethodservice.InputMethodService; import android.inputmethodservice.Keyboard; public class MyInputMethod extends InputMethodService { private Keyboard mKeyboard; @Override public void onInitializeInterface() { mKeyboard = new Keyboard(this, R.xml.qwerty); } @Override public View onCreateInputView() { mInputView = (KeyboardView) getLayoutInflater().inflate( R.layout.input, null); mInputView.setKeyboard(mKeyboard); return mInputView; } } 

Обратите внимание, что два XML-документа называются. Первый, res/xml/qwerty.xml , определяет макет, чтобы класс KeyboardView знал, как рисовать клавиатуру.

Но макет, который он раздувает, res/layout/input.xml , состоит из этого (упрощенного):

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> <android.inputmethodservice.KeyboardView android:id="@+id/keyboard" /> </LinearLayout> 

Это все, что вам нужно, чтобы декларативно создать представление! Создание автономного представления мало чем отличается от создания Activity . У вас нет стандартного жизненного цикла деятельности, но обе среды предоставляют вам доступ к макетам XML. Все, что вам нужно сделать, это использовать надуватель, ссылаться на любые подзаголовки, которые вам нужны, а затем возвращать основной вид.

Поэтому, надеюсь, вы сможете раздуть макет, подумав об этом.


Вам даже не нужно использовать XML-макеты, если ваш макет достаточно прост. Если ваш метод ввода может состоять полностью из одного представления, вы можете просто создать его непосредственно в onCreateInputView . Вот полный метод ввода заглушки, который не использует XML:

 public class MyInputMethod extends InputMethodService { MyView view; @Override public View onCreateInputView() { return view = new MyView(this); } } 

(Конечно, res/xml/method.xml файлах манифеста и res/xml/method.xml все равно будут.)

Intereting Posts
Клавиатура bluetooth приведет к разрушению и восстановлению активности Блокировка мобильного приложения Facebook Передача данных из класса BroadcastReceiver в Android-активность Ошибки вычисления значения двойной точности на процессорах MediaTek Как установить размер значка в TabLayout? Низкая производительность при выполнении eglSwapBuffer и eglMakeCurrent Android – индекс для ListView? Можно ли заставить приложение работать в безопасном режиме? Как получить доступ к кнопке фрагмента A из фрагмента B Я правильно использую фрагменты? Как получить круговой, обрезанный по центру образ, без создания нового растрового изображения? Как обращаться с кнопкой возврата устройства на сенсорном приложении Sencha Автоматизация копирования мобильных приложений из DropBox и установка на устройство Android: получение случайного числа из метода JNI Как установить максимальную ширину на LinearLayout так, чтобы она не растягивалась в ландшафтном режиме?