actionDone imeOption не работает с EditText в Android 2.3

У меня проблема с использованием EditText в Android 2.3.

У меня есть EditText, определенное со свойством android:imeOptions="actionDone", но когда я пишу с помощью виртуальной клавиатуры, клавиша возврата не обнаруживает actionDone и вводит строку возврата.

В Android 2.2 работает правильно.

<EditText android:layout_height="wrap_content"
    android:layout_width="fill_parent" 
    android:imeOptions="actionDone" />

person Alex    schedule 07.04.2011    source источник
comment
Стоит отметить, что я обнаружил, что реализация TextWatcher иногда может иметь странные последствия для опции actionDone.   -  person deepwinter    schedule 26.04.2013


Ответы (3)


Я решил эту проблему. Я добавил свойство android:singleLine="true", и оно работает правильно.

<EditText android:layout_height="wrap_content"
    android:layout_width="fill_parent" 
    android:imeOptions="actionDone"
    android:singleLine="true" 
 />
person Alex    schedule 07.04.2011
comment
Спасибо за это. Это работает и для android:imeOptions="actionNext" android:nextFocusDown="@+id/addjob_description" android:singleLine="true". - person Ants; 18.10.2011
comment
Кто-нибудь знает, почему это работает? Впрочем, я не жалуюсь :))) - person luigi7up; 15.11.2011
comment
действительно немного странно, что вам нужно добавить еще android:singleLine="true", чтобы android:imeOptions="actionSearch" имело эффект... - person Paul; 22.06.2012
comment
Я считаю, что это работает только тогда, когда включена одна строка, потому что она использует ту же кнопку (по крайней мере, на моем Android). - person Pijusn; 06.08.2012
comment
Павел, так оно и есть, потому что в случае многострочного текста по умолчанию ime действием является возврат каретки. Чтобы изменить его на что-то другое, должен быть однострочный текст. - person lomza; 19.02.2013
comment
Также обратите внимание, что установка некоторых типов ввода приведет к игнорированию imeOption. Например, установка для inputType значения textShortMessage даст вам ключ со смайликами, даже если для imeOption установлено что-то вроде actionDone. - person Ian G. Clifton; 19.03.2013
comment
Данг. Я хочу «Готово» в многострочном текстовом поле. Разве это невозможно? - person MrPickles7; 24.11.2015
comment
android:singleLine="true" устарел. Вместо этого используйте android:maxLines="1" android:inputType="text" для более новых версий. - person Ankit Popli; 20.04.2016
comment
и все еще в декабре 2016 года это единственный способ заставить imeOptions работать с inputType="text", учитывая, что он устарел в версии 3, и теперь мы находимся в версии 25, что просто кажется безумием. - person Joe Maher; 16.12.2016

Еще один примечательный момент заключается в том, что android:imeOptions не работает, если вы укажете android:digits. Не уверен, что это влияет на все версии Android.

person cybergen    schedule 06.05.2013
comment
Да, я заметил, что Android решает перезаписать imeOptions тем, что он решит вставить в него ... Лол, зачем вставлять его, если вы все равно собираетесь его перезаписать. Очередная беда Android. - person Kevin Parker; 11.09.2014

В настоящее время в Android Studio 2.2.3, если вы используете

android:singleLine="true"

IDE выдает предупреждение о том, что использование maxlines устарело.

android:maxLines="1"

Однако maxLines не решает проблему. Решение состоит в том, чтобы просто добавить атрибут inputType. Пример :

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/actionDoneDemo"
    android:layout_below="@id/nameET"
    android:imeOptions="actionDone"
    android:hint="Action Done Demo"
    android:inputType="text"/>
person Akash Chugh    schedule 02.02.2017