Пользовательский IME Android для определенного InputType

В настоящее время я разрабатываю IME, который генерирует мне динамический пароль на основе моего ввода. Я использовал образец SoftKeyboard для реализации этого проекта.

Когда мне нужно ввести пароль, мне просто нужно изменить метод ввода, и пока все в порядке.

Мой вопрос довольно прост. Есть ли способ разрешить этот IME только тогда, когда InputType является типом пароля, например (InputType = TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) или будет ли метод указать конкретную клавиатуру (в данном случае мой IME), когда InputType является типом пароля ?

Благодарю вас !


person Nk.    schedule 16.07.2014    source источник
comment
пожалуйста, опубликуйте SSCCE...   -  person rahul pasricha    schedule 17.07.2014


Ответы (1)


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

person Gabe Sechan    schedule 16.07.2014
comment
Хорошо, спасибо за ответ Гейб Сечан! Я думаю, что заменю все ключи (кроме пробела) на удаление или что-то еще, если inputType не является паролем. - person Nk.; 17.07.2014
comment
@GabeSechan Какой код будет использовать приложение для запроса определенного IME для EditText? - person ban-geoengineering; 17.12.2019
comment
@ban-geoengineering Вы используете oarameter android:inputMethod xml и передаете ему полное имя класса, которое хотите использовать. Это следует использовать (и гарантированно работать) только для IME, являющегося частью вашего приложения. Его не следует использовать для принудительного использования определенного приложения клавиатуры, и даже если это приложение установлено, оно, вероятно, не будет работать для этого. - person Gabe Sechan; 17.12.2019
comment
@GabeSechan android:inputMethod больше не рекомендуется. Я все равно пробовал, но в итоге получил ClassNotFoundException: не нашел класс com.example.MyCustomIME по пути: DexPathList[[directory .],nativeLibraryDirectories=[/vendor/lib, /system/lib]]. Я добавил -keep class com.example.MyCustomIME {*;} в свой файл proguard-rules.pro, но это не помогло. Любые идеи? - person ban-geoengineering; 19.12.2019
comment
Я разместил здесь новый вопрос, если вы можете помочь: stackoverflow.com/questions/59400635/ - person ban-geoengineering; 19.12.2019
comment
@ ban-geoengineering Я не понимаю, почему вы так думаете, в документации он не указан как устаревший. И использование inputType, как вы пытаетесь, никогда не будет работать, inputType - это поле флага типа, которое будет передано в IME-inputMethod, это ЕДИНСТВЕННЫЙ метод для этого. - person Gabe Sechan; 19.12.2019
comment
@GabeSechan Здесь это не задокументировано: developer.android.com/reference /android/widget/ Но это здесь: разработчик. android.com/reference/android/R.attr.html#inputMethod . Android Studio (все самое последнее), похоже, идет с последним. - person ban-geoengineering; 19.12.2019
comment
@ ban-geoengineering Я хотел бы отметить, что устаревшее не означает исчезнувшее или непригодное для использования. Но я бы доверял документации по виджету до R.attr. И нет другого способа сделать это (inputType — это нечто совершенно другое). - person Gabe Sechan; 19.12.2019
comment
@GabeSechan Хорошо, это имеет смысл. Любая идея, как я могу преодолеть ошибку ClassNotFoundException? - person ban-geoengineering; 19.12.2019
comment
@ ban-geoengineering Я бы проверил, правильно ли он зарегистрирован как IDE. Я бы также перепроверил против proguard. Простой способ сделать это - попытаться получить доступ к классу через отражение, если вы не можете, это проблема. - person Gabe Sechan; 19.12.2019
comment
@GabeSechan Он правильно зарегистрирован как IME, поскольку он доступен на экране настроек Настройка методов ввода устройства. Я также могу получить доступ к классу через отражение. Я создал здесь новый вопрос с немного дополнительной информацией, если вы могли бы взглянуть: stackoverflow.com/questions/59410616/ - person ban-geoengineering; 19.12.2019