Я новичок в области разработки Android, и я пытаюсь понять, как настроить кнопки действия IME. Я просмотрел документацию Google, но я могу найти очень мало информации о ожидаемом поведении.
Из официального руководства Я понимаю, что кнопку действия клавиатуры можно настроить с помощью атрибутов:
- android: imeOptions может установить текст/идентификатор кнопки, отображаемой рядом с клавишей пробела, на некоторые заранее определенные значения (например, actionGo установить метку ключа на Go и id на 2)
- android: imeActionLabel установите метку кнопки, отображаемой внутри области ввода, когда клавиатура полноэкранная, обычно в альбомном режиме. Может быть установлено любое строковое значение.
- android: imeActionId, как и предыдущий, но установите числовой идентификатор, переданный методу обратного вызова
Но после некоторых эмпирических попыток я обнаружил различное поведение между уровнями API 15 и следующими уровнями API.
Я создал простой элемент EditText со следующими атрибутами:
<EditText
...
android:imeOptions="actionGo"
android:imeActionLabel="Custom"
android:imeActionId="666"
android:inputType="text"/>
и я проверил эффект с различными уровнями API как в портретном, так и в ландшафтном режимах. Вот результат.
Уровень API 15 - 4.0.3
В портретном режиме метка ключа - Go, а идентификатор действия, переданный методу обратного вызова, равен 2, соответственно настройке imeOptions.
В ландшафтном режиме ключевой ярлык/идентификатор - Go/2 в качестве портретного режима, а кнопка, отображаемая в области ввода, - Custom/666, соответственно атрибутам imeActionLabel и imeActionId.
Уровень API 16, 17 и 18 - 4.1.2, 4.2.2 и 4.3
В портретном и ландшафтном режимах клавиша и кнопка отображаются с пользовательской меткой и привязаны к 666 id, игнорируя атрибут imeOptions.
Это несоответствие в поведении довольно раздражает, потому что:
- с уровнем API >= 16 вы не можете различать кнопку кнопки и кнопки области ввода
- с уровнем API = 15 вы не можете установить какой-либо пользовательский текст для ключевой кнопки.
Вы знаете, как получить это как в API 15, так и в 16+? Или, если есть способ получить согласованное поведение для всех (или, по крайней мере, части) версий API?
Может быть, мне что-то не хватает в настройках IME, которые могут оправдать различное поведение...
Большое спасибо!