Как сделать кнопку редактирования Android «Сделано» и скрыть клавиатуру при нажатии? - PullRequest
97 голосов
/ 17 декабря 2009

Когда пользователь нажимает на EditView, Android открывает клавиатуру, чтобы пользователь мог писать в EditView.

Проблема в том, что когда пользователь заканчивает писать, нет способа скрыть клавиатуру. Пользователь должен нажать кнопку «назад», чтобы скрыть клавиатуру.

Есть ли способ отобразить на клавиатуре кнопку Done, которая будет скрывать клавиатуру?

Ответы [ 13 ]

135 голосов
/ 28 июня 2011

Сначала вам нужно установить атрибут android:imeOptions равным actionDone для вашего целевого EditText, как показано ниже. Это изменит вашу кнопку «RETURN» на программной клавиатуре вашего EditText на кнопку «DONE».

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />
125 голосов
/ 17 декабря 2009

Используйте TextView.setImeOptions и передайте ему actionDone. как textView.setImeOptions(EditorInfo.IME_ACTION_DONE);

79 голосов
/ 14 октября 2013

Включите оба imeOptions и singleLine:

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />
33 голосов
/ 20 сентября 2015
android:imeActionLabel="Done" 
android:singleLine="true"

В файле XML работает просто отлично. Но это также приведет к тому, что editText будет продолжать печатать в одной строке, чего вы, возможно, не хотите. Таким образом, добавление следующего к вашему коду гарантирует, что вы не будете печатать все в одной строке.

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");
14 голосов
/ 12 июля 2013

Используйте это:

android:singleLine="true"
9 голосов
/ 29 января 2018

Для получения готовой кнопки

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

и

android:inputType="text" в xml

Для обработки по нажатию с клавиатуры

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });

`

9 голосов
/ 23 марта 2015

Используйте эти две строки для вашего EditText

android:imeActionLabel="Done"
android:singleLine="true"

или вы можете достичь этого Программно этой строкой.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
6 голосов
/ 17 марта 2011

Если свойство для виджета не изменяется, может быть лучше использовать как android:imeOptions="actionDone" в макете xml файла.

5 голосов
/ 09 июля 2017

Я должен отметить, что многие люди могут бороться с этим, не зная проблемы.

Если вы хотите, чтобы kb скрывался при нажатии Done, и вы установили android:imeOptions="actionDone" & android:maxLines="1" без , установив свой EditText inputType, он будет НЕ работать как по умолчанию inputType для EditText не "text", как многие думают.

Итак, установка только inputType даст вам желаемые результаты независимо от того, что вы устанавливаете как "text", "number", ... и т. Д.

5 голосов
/ 13 января 2017

ActionDone используется при нажатии следующей кнопки на клавиатуре в это время клавиатура скрыта. Используйте в Edit Text или AppcompatEdit

XML

1.1 Если вы используете AppCompatEdittext

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

1.2 Если вы используете Edittext

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

JAVA

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...