Отключить автозаполнение для EditText?


123

Есть ли способ программно отключить этот список автозаполнения, который появляется при вводе EditText?

Ответы:


122

У меня был тот же вопрос, но я все еще хотел установить эту опцию в своем XML-файле, поэтому я провел еще немного исследований, пока не нашел его сам.

Добавьте эту строку в свой EditText.

android:inputType="textFilter" 

Вот совет. Используйте эту строку, если хотите иметь возможность использовать клавишу «ввод».

android:inputType="textFilter|textMultiLine"

ПОЛУЧИТЕ МОЙ голос! На самом деле это очень хорошо работает, когда вы хотите, чтобы EditText выглядел как textView.
sir_k

1
Не работает и на нескольких телефонах с Android 4.4
voghDev

API 24 / Android 7.0: я заменил android:inputType="textPersonName"предложенный текст, но он по-прежнему отображает строку предложений (со значком микрофона).
Неф

120
android:inputType="textNoSuggestions"  

также вам лучше прочитать это


5
Обратите внимание, что textNoSuggestions работает только для API 5 и выше.
glr

89
@gyller вы видели какое-либо устройство с API меньше 5?
kreker

15
0,23% моих пользователей используют 1.6 (уровень API 4). :)
Джереми Логан

1
Хотя тогда вы теряете клавишу ENTER. Если вы хотите иметь возможность использовать ENTER android: inputType = "textNoSuggestions | textMultiLine"
barlop

3
Он отключает предложения, но по-прежнему показывает строку предложений (в ней есть опция микрофона).
VipulKumar

61
android:inputType="textVisiblePassword" 

работает как шарм


3
Я бы не пошел по этому пути. Это взлом, и вы не упоминаете, какие другие функции клавиатуры могут измениться, когда вы говорите, что это для пароля. Используйте "text | textNoSuggestions".
Майкл Петерсон,

2
@ P1X3L5 textNoSuggestions не работает на многих устройствах. К сожалению, этот хакер необходим, пока Google не исправит это
Тарик

1
для меня это было лучше, он также удаляет полосу над клавиатурой (nexus 5), что не обязательно должно быть верно для всех устройств, но дает лучшую производительность для некоторых пользователей (это также отключает возможность речевого ввода)
Аркадиуш Цеслинский

1
это сработало, чтобы удалить .точку char, добавленную в конце слова, если после этого слова вводятся два пробела. Я использовал его для панели действий searchView((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Джин Бо

Это единственное решение, которое у меня сработало. Другие ответы не работают при перемещении по форме и возврате в поле. Google - такая куча наркоты. Выпуск таких простых функций, которые являются неполными и плохо протестированы.
angryITguy

41

Способы сделать это:

  1. Programatically
editText.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
  1. XML
android:inputType="textNoSuggestions"

Если у вас уже установлены некоторые флаги, то:

  1. Programatically
inputType = if (disableSuggestions) {
  InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or inputType
} else {
  inputType and InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS.inv()
}
  1. XML
android:inputType="textNoSuggestions|textPassword"

22

Самый надежный подход, который я нашел для избавления от автозаполнения, - это использовать

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

на вашем элементе управления EditText. Как Чарли сообщил в другом ответе на этой странице,

android:inputType="textVisiblePassword"

XML-версия этого флага.

Вы можете комбинировать этот флаг с

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

Я использовал InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS без InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, который работал для большинства телефонов, но затем я наткнулся на телефон Samsung, для которого все еще выполнялось автозаполнение.

Android программно отключает автозаполнение / автозаполнение для EditText в эмуляторе

который предложил использовать InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

Я пробовал это (вместе с InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS), и это сработало. Вы можете понять, почему даже телефон, который может не понимать намек на то, что вам не нужно автозаполнение, должен разрешать отключение его для поля пароля. Если не считать задержки дыхания, это может быть лучший способ получить то, что мы хотим от таких телефонов.

На некоторых из моих устройств шрифт был немного изменен этим флагом - наиболее заметно, чтобы более четко отличать ноль (0) от Oh (O), что, очевидно, было бы важно для отображения пароля. Но, по крайней мере, это сработало, и новый шрифт не был непривлекательным.

Несмотря на то, что сообщение, в котором я нашел это предложение, было старым, телефон, на котором я тестировал, был совсем недавним - это Samsung Galaxy Note II (SPH-L900) с Android 4.1.2 от Sprint. Выбранной клавиатурой была «Samsung Keyboard», и, очевидно, это была клавиатура по умолчанию для этого телефона, когда покупатель получил ее от Sprint. Таким образом, эта проблема, по-видимому, сохранялась на протяжении многих лет по крайней мере для некоторых важных телефонов Samsung.

Для тех из вас, у кого, как и у меня, нет тестового устройства Samsung, это может быть важная информация.


3
Не работает на Samsung S3 с сегодняшней прошивкой. К сожалению.
Отображаемое имя

@SargeBorsch: Вы хотите сказать, что TYPE_TEXT_VARIATION_VISIBLE_PASSWORD вместе с TYPE_TEXT_FLAG_NO_SUGGESTIONS по-прежнему выполняет автозаполнение на вашем S3? Я так, вы используете стандартную клавиатуру? У меня нет S3, но я пробовал свое приложение (которое использует вышеуказанный подход) на S3 в прошлом, и не было автозаполнения. У меня S4 под управлением Android 4.4 (Cyanogenmod), и он также не заполняется автоматически.
Carl

@SargeBorsch: Если вы хотите попробовать приложение, использующее описанный выше подход на вашем S3, вот мое: play.google.com/store/apps/… Было бы интересно узнать, находится ли поле «Проверить слово» внизу приложение (которое использует указанные выше флаги) пытается выполнить автозаполнение на вашем устройстве. ТИА.
Carl

Спасибо, скоро посмотрю
Отображаемое имя

> "Вы хотите сказать, что TYPE_TEXT_VARIATION_VISIBLE_PASSWORD вместе с TYPE_TEXT_FLAG_NO_SUGGESTIONS по-прежнему выполняет автозаполнение на вашем S3?" Да, точно. Хотя есть также тип электронной почты, потому что это ввод электронной почты ...
Отображаемое имя

20

Для версии Android 8.0 или выше этот код не работает, а для текстового представления автозаполнения этот код также не работает, поэтому я предлагаю вам использовать приведенный ниже код для Отключить автоматические предложения в версии 8.0 или выше Android vesrion, используйте это свойство edittext android: importantForAutofill = "нет"

                   <EditText
                            android:id="@+id/name"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:enabled="false"
                            android:focusable="false"
                            android:imeOptions="actionDone"
                            android:maxLength="80"
                            android:maxLines="1"
                            android:textColor="@color/colorBlack"
                            android:textColorHint="@color/colorBlack"
                            android:importantForAutofill="no"
                            android:textSize="@dimen/_12sdp"
                            app:bFontsEdt="light" />

и для такого текстового представления AutoComplete используйте это поле, чтобы отключить автоматическое предложение android: importantForAutofill = "no" :

      <AutoCompleteTextView
                        android:id="@+id/autocompleteEditTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="@dimen/_3sdp"
                        android:layout_marginTop="@dimen/_5sdp"
                        android:background="@null"
                        android:imeOptions="actionDone"
                        android:singleLine="true"
                        android:text=""
                        android:textColor="@color/colorBlack"
                        android:textColorHint="@color/colorGrayDark"
                        android:importantForAutofill="no"
                        android:textSize="@dimen/_12sdp" />

2
Потрясающие! Это единственное, что у меня сработало.
Лорел Томсон

Единственное, что у меня работает, спасибо @MaheshKeshvala, проголосовало за то, что спасло мне день.
Рави Вания,

Автозаполнение - это не автозаполнение клавиатуры, это разные функции. Автозаполнение обрабатывается ОС, а автозаполнение - разработчиком клавиатуры (надеюсь).
milosmns

11

Вы можете решить эту проблему, используя это:

android:importantForAutofill="no" 

Android O имеет функцию поддержки автоматического заполнения полей, просто используйте это только в своем xml, это отключит подсказки автозаполнения


это сработало только у меня .... Спасибо
Akash kumar

7

Поскольку это все еще проблема, я отправлю этот ответ. android: inputType = "textVisiblePassword" работает, но это нежелательно, во-первых, потому что это искажение ввода, а во-вторых, потому что он отключает ввод с помощью жестов!

Вместо этого мне пришлось использовать ОБА флага textNoSuggestions и textFilter. Либо один по отдельности не работал.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

TextCapSentences был по другим причинам. Но этот inputType сохранил смахивающий ввод и отключил панель инструментов предложений.


7

Получал эту штуку на телефонах самсунг под управлением 4.4.4. Это решило мою проблему

android:inputType="text|textVisiblePassword|textNoSuggestions"

То же самое на Samsung с 8.1. Единственное, что у меня сработало, это android: inputType = "textVisiblePassword | textNoSuggestions"
Эйно Гурдин,

4

Хорошо, проблема была в том, что в Eclipse вы не получаете предложения для флага с именем: textNoSuggestion

И вы не можете установить его в main.xml (где вы разрабатываете пользовательский интерфейс), потому что этот атрибут для inputType не распознается. Таким образом, вы можете установить его в коде, используя int const:

EditText txtTypeIt = (EditText) this.findViewById(R.id.txtTypeIt);
txtTypeIt.setInputType(524288);

И спасибо jasta00 за то, что помог мне найти ответ на этот вопрос.


6
Это выполняет свою работу ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
w.donahue 03

2
Согласен, используйте константу, а не значение
Дэвид Снабел-Каунт

1
@ kape123 Вы не можете установить android: inputType = "textNoSuggestions" в xml, потому что ваша цель сборки ниже 5 api
kreker

Обратите внимание, что для некоторых телефонов Samsung автозаполнение стандартной клавиатуры не отключается с помощью InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Один человек предлагает использовать InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD в этом довольно старом посте: stackoverflow.com/questions/6281514/…
Карл


1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Это вам поможет.


1
    // 100% correct & tested
    txtKey = (EditText) view.findViewById(R.id.txtKey);
    txtKey.setPrivateImeOptions("nm");
    txtKey.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        txtKey.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
    }

0

Вы можете просто использовать метод EditText setThreshold(). Установите порог, скажем, 100, если вы не хотите показывать прогнозы. Если вы хотите повторно активировать отображение прогнозов, установите для него небольшое значение типа int, например 1 или 2, в зависимости от ваших потребностей.


для EditText нет setThreshold (), не могли бы вы объяснить?
behelit 08
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.