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

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


person nikib3ro    schedule 24.12.2009    source источник


Ответы (14)


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

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

android:inputType="textFilter" 

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

android:inputType="textFilter|textMultiLine"
person glr    schedule 02.01.2010
comment
ПОЛУЧИТЕ МОЁ ПРОГОЛОСОВАНИЕ! На самом деле это работает очень хорошо, когда вы хотите, чтобы EditText выглядел как textView. - person sir_k; 12.02.2015
comment
Также не работает на нескольких телефонах с Android 4.4. - person voghDev; 21.09.2017
comment
API 24/Android 7.0: я заменил android:inputType="textPersonName" предлагаемым текстом, но он по-прежнему отображает строку предложения (со значком микрофона). - person Neph; 25.02.2020
comment
Я использовал в textinputlayout с edittext по-прежнему показывать часто используемую электронную почту - person mayur.p; 28.05.2021

android:inputType="textNoSuggestions"  

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

person kreker    schedule 16.04.2011
comment
Обратите внимание, что textNoSuggestions работает только для API 5 и выше. - person glr; 17.04.2011
comment
@gyller, вы видели какое-нибудь устройство с API меньше 5? - person kreker; 31.08.2011
comment
0,23% моих пользователей используют 1.6 (уровень API 4). :) - person Jeremy Logan; 23.07.2013
comment
Согласно документации это должно быть право на это, но некоторые клавиатуры игнорируют эту опцию: support.swiftkey.net/forums/116693-2-bug-reports/suggestions/ - person Luiz Aoqui; 15.04.2014
comment
Хотя вы тогда потеряете клавишу ENTER. Если вы хотите использовать ENTERs android:inputType=textNoSuggestions|textMultiLine - person barlop; 28.07.2014
comment
Клавиатура samsung tab3 по умолчанию игнорирует это, как и фильтр. - person Daniel Jonker; 15.10.2014
comment
Он отключает предложения, но по-прежнему показывает строку предложений (в ней есть опция микрофона). - person VipulKumar; 09.01.2015
comment
это работает в сочетании с android:inputType=textMultiLine? - person RonTLV; 15.11.2018
comment
@RonTLV, ты должен попробовать - person kreker; 16.11.2018
comment
Также игнорируется эмулятором AS с изображением Pixel XL, уровень API 24. Однако обходной путь VISIBLE_PASSWORD работает. - person CodeClown42; 21.01.2021

android:inputType="textVisiblePassword" 

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

person Mr_Hmp    schedule 29.03.2013
comment
Я бы не пошел по этому пути. Это взлом, и вы не упоминаете, какие другие функции клавиатуры могут измениться, когда вы говорите, что это пароль. Используйте text|textNoSuggestions. - person Michael Peterson; 04.03.2015
comment
@P1X3L5 textNoSuggestions не работает на многих устройствах. К сожалению, этот взлом необходим, пока Google не исправит это. - person Tariq; 11.07.2015
comment
для меня это было лучше, он также убирает полосу над клавиатурой (нексус 5), что не обязательно должно быть верно для всех устройств, но дает лучшую производительность для некоторых пользователей (также отключает возможность голосового ввода) - person Arkadiusz Cieśliński; 21.11.2015
comment
это работало, чтобы удалить символ периода ., добавленный в конце слова, если после этого слова вводятся два пробела. Я использовал его для панели действий searchView ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); - person Gene Bo; 27.06.2016
comment
Это единственное решение, которое сработало для меня. Другие ответы не работают при перемещении по форме и возвращении в поле. Google такая кучка придурков. Выпуск таких простых функций, которые являются неполными и плохо протестированными. - person angryITguy; 20.08.2018
comment
Обратите внимание, что в целях доступности этот inputType теперь обрабатывает текст редактирования как пароль, а режим обратной связи будет объявлять об отображении клавиатуры с паролем при появлении клавиатуры. Это может ввести в заблуждение пользователей, использующих режим TalkBack в вашем приложении. - person h_k; 01.11.2019
comment
спасибо @Mr_Hmp это хорошо работает. Но есть ситуация, мне нужно, чтобы первая буква каждого слова была заглавной. Для этого у нас есть textCapWords, но это не работает с textVisiblePassword. пожалуйста, порекомендуйте - person Parmendra Singh; 04.03.2020
comment
Если вам нужно использовать первую заглавную букву, вы можете сделать это при обратном вызове onTextChanged. это то, что сработало для моего варианта использования, никакие предложения не показывают предложения с клавиатурой Google. - person Lassi Kinnunen; 05.03.2020
comment
нет смайлов :((((( - person coolcool1994; 11.05.2021

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

  1. Программно
editText.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
  1. XML
android:inputType="textNoSuggestions"

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

  1. Программно
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"
person Enzokie    schedule 24.10.2015

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

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) от О (О), что, очевидно, было бы важно для отображения пароля. Но, по крайней мере, это сработало, и новый шрифт не был непривлекательным.

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

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

person Carl    schedule 08.06.2013
comment
Не работает на Samsung S3 с сегодняшней прошивкой. Упс. - person Display Name; 18.11.2014
comment
@SargeBorsch: Вы говорите, что TYPE_TEXT_VARIATION_VISIBLE_PASSWORD вместе с TYPE_TEXT_FLAG_NO_SUGGESTIONS по-прежнему выполняет автозаполнение на вашем S3? Я так понимаю, ты используешь стоковую клавиатуру? У меня нет S3, но я пробовал свое приложение (в котором используется описанный выше подход) на S3 в прошлом, и автозаполнения не было. У меня есть S4 под управлением Android 4.4 (Cyanogenmod), и он также не выполняет автозаполнение. - person Carl; 18.11.2014
comment
@SargeBorsch: Если вы хотите попробовать приложение, использующее вышеуказанный подход на вашем S3, вот мое: play.google.com/store/apps/ Было бы интересно узнать, отображается ли поле Check Word в нижней части этого приложения (которое использует указанные выше флаги). ) пытается выполнить автозаполнение на вашем устройстве. ТИА. - person Carl; 18.11.2014
comment
Спасибо, скоро проверю - person Display Name; 19.11.2014
comment
›Вы хотите сказать, что TYPE_TEXT_VARIATION_VISIBLE_PASSWORD вместе с TYPE_TEXT_FLAG_NO_SUGGESTIONS по-прежнему выполняет автозаполнение на вашем S3? Да, точно. Хотя есть еще тип E-mail, потому что это ввод электронной почты… - person Display Name; 19.11.2014
comment
Нет, поле Check Word не вызывает автозаполнение. кажется, что флаг электронной почты вызывает проблему. - person Display Name; 19.11.2014
comment
Ах. Таким образом, это все еще решение только с двумя перечисленными флагами. Спасибо за проверку. - person Carl; 19.11.2014
comment
Я наткнулся на телефон Samsung, для которого я все еще получал автозаполнение -› Эй, 7 лет спустя, и TYPE_TEXT_FLAG_NO_SUGGESTIONS абсолютно не влияет на эмулятор AS, работающий с изображением Google Pixel. ›_‹ Но VISIBLE_PASSWORD работает. Большое спасибо. - person CodeClown42; 21.01.2021

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

                   <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" />

и для текстового представления автозаполнения, подобного этому, используйте это поле для отключения автоматического предложения 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" />
person Mahesh Keshvala    schedule 27.05.2019
comment
Потрясающий! Это было единственное, что сработало для меня. - person Laurel Thomson; 19.12.2019
comment
Единственное, что работает для меня, спасибо @MaheshKeshvala, проголосовал за спасение моего дня. - person Ravi Vaniya; 24.01.2020
comment
Автозаполнение — это не автозаполнение с клавиатуры, это разные функции. Автозаполнение обрабатывается ОС, тогда как автозаполнение обрабатывается разработчиком клавиатуры (надеюсь). - person milosmns; 04.03.2020

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

android:importantForAutofill="no" 

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

person eagerprince    schedule 28.11.2019

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

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

android:inputType="textCapSentences|textFilter|textNoSuggestions"

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

person Tariq    schedule 17.08.2015

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

android:inputType="text|textVisiblePassword|textNoSuggestions"
person Ajji    schedule 20.07.2016
comment
То же самое на Samsung под управлением 8.1. Единственное, что у меня сработало, это android:inputType=textVisiblePassword|textNoSuggestions - person Eino Gourdin; 06.03.2020

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

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

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

И спасибо jasta00 за помощь в поиске ответа на этот вопрос.

person nikib3ro    schedule 26.12.2009
comment
Это делает работу... .setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); - person w.donahue; 03.08.2011
comment
Согласен, используйте константу, а не значение - person David Snabel-Caunt; 14.09.2011
comment
@ kape123 Вы не можете установить android:inputType=textNoSuggestions в xml, потому что ваша цель сборки ниже 5 API - person kreker; 04.03.2012
comment
Обратите внимание, что для некоторых телефонов Samsung стандартное автозаполнение клавиатуры не отключается с помощью InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Один человек предлагает использовать InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD в этом довольно старом сообщении: stackoverflow.com/questions/6281514/ - person Carl; 03.06.2013

Это сработало для меня

android:importantForAutofill="no" 
android:inputType="none|textNoSuggestions"
person Rajesh Nasit    schedule 28.01.2021
comment
Мне помогло, большое спасибо. - person Gyan Swaroop Awasthi; 17.02.2021

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

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

person Thomas V J    schedule 14.05.2012

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

person kaolick    schedule 19.02.2013
comment
нет setThreshold() для EditText, не могли бы вы объяснить? - person behelit; 08.06.2016

person    schedule
comment
очень красивые решения! - person Романыч; 04.05.2021