Поведение imeOptions, imeActionId и imeActionLabel

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

Изофициальный гид Я понимаю, что кнопка действия клавиатуры может быть настроена с помощью атрибутов:

андроид: imeOptions Можно установить для текста / идентификатора кнопки, отображаемой рядом с пробелом, некоторые предварительно определенные значения (например, actionGo установить метку ключа наИдти и идентификатор до 2)андроид: imeActionLabel установите метку кнопки, отображаемой внутри области ввода, когда клавиатура работает в полноэкранном режиме, обычно в горизонтальном режиме. Может быть установлено любое строковое значение.андроид: imeActionId такой же, как предыдущий, но установить числовой идентификатор, переданный методу обратного вызова

Но после некоторых эмпирических попыток я обнаружил различное поведение между уровнем API 15 и следующими уровнями API.

Я установил простой элемент EditText со следующими атрибутами:

<EditText
        ...
        android:imeOptions="actionGo"
        android:imeActionLabel="Custom"
        android:imeActionId="666"
        android:inputType="text"/>

и я проверил эффект с различными уровнями API как в портретном, так и в ландшафтном режиме. Вот результат.

Уровень API 15 - 4.0.3

В портретном режиме ключевая меткаИдти и идентификатор действия, переданный методу обратного вызова, равен 2, в соответствии с настройкой imeOptions.

В ландшафтном режиме ключевой ярлык / идентификаторИдти/ 2 в качестве портретного режима, в то время как кнопка, отображаемая в области ввода,изготовленный на заказ/ 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, что может оправдать другое поведение ...

Большое спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос