Мое приложение включает пользовательский IME (который расширяет InputMethodService), и теперь я хотел бы указать его как IME для всех EditTexts в моем приложении.
Указание android:inputMethod
для каждого EditText кажется одним из старых способов сделать это, но android:inputMethod
теперь устарело. Во всплывающей подсказке говорится, что вместо этого следует использовать android:inputType
.
Мой существующий код для одного EditText - android:inputType="numberPassword"
, но когда я меняю его на android:inputType=".MyCustomIME"
(или android:inputType="com.example.MyCustomIME"
), я получаю эту ошибку в Android Studio:
Не удается разрешить флаг.
Итак, как правильно указать мой IME (либо для одного EditText, либо для всего приложения) — и без потери моего существующего значения numberPassword
(поскольку это определяет мой подтип IME, который будет использоваться)?
Мой IME определен в моем манифесте как:
<service
android:name=".MyCustomIME"
android:label="@string/my_keyboard"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action
android:name="android.view.InputMethod" />
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@xml/keyboard_method" />
</service>
(Примечание: использование android:name="com.example.MyCustomIME"
в приведенном выше теге <service />
не имеет никакого значения.)
android:inputMethod
не считается устаревшим. Лично я не ожидал бы, что он будет надежно работать у разных производителей устройств. И, если ваш IME не обрабатывает все возможные сценарии доступности, у вас могут быть недовольные пользователи. Но я удалил свой предыдущий комментарий здесь — я должен был сделать это после просмотра отрицательного голоса, но я забыл, и я приношу извинения за это. - person CommonsWare   schedule 19.12.2019TextView
не показывает его как устаревшее, аandroid:inputType
на самом деле не является заменой. FWIW, я подал проблему с документацией по поводу несоответствия, хотя у меня плохой опыт в привлечении кого-либо смотреть на такие вещи. - person CommonsWare   schedule 19.12.2019