Вимкнути автоматичний підказку для 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. Якщо ви хочете мати можливість використовувати ENTERs android: inputType = "textNoSuggesitions | textMultiLine"
barlop

3
Він вимикає пропозиції, але все ще показує рядок пропозицій (в ньому є варіант мікрофона).
VipulKumar

61
android:inputType="textVisiblePassword" 

працює як шарм


3
Я б не пішов цим маршрутом. Це злом, і ви не згадуєте, які інші функції клавіатури можуть змінюватися, коли ви скажете, що це пароль. Використовуйте "text | textNoSuggestions".
Майкл Петерсон

2
@ P1X3L5 textNoSuggesitions не працює для багатьох пристроїв. На жаль, цей злом необхідний, поки Google не виправить це
Tariq

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

1
це працювало для видалення .знаку періоду, доданого в кінці слова, якщо після цього слова набрано два пробіли. Я використовував його для пошуку в панелі екшнів ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo

Це єдине рішення, яке працювало на мене. Інші відповіді не працюють під час переміщення через форму та повернення до поля. Google - така купа допінгів. Випуск таких простих функцій, які є неповними та погано перевірені.
сердитийТіг

41

Способи зробити це:

  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"

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", і, мабуть, це було типовим для цього телефону, коли клієнт отримав його від 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), і він також не завершується автоматично.
Карл

@SargeBorsch: Якщо ви хочете спробувати додаток, який використовує вищевказаний підхід у вашому S3, ось мій: play.google.com/store/apps/… Було б цікаво дізнатись, чи є поле Перевірити слово внизу цього додаток (який використовує вищевказані прапори) намагається автозавершити на вашому пристрої. ТІА.
Карл

Дякуємо, незабаром перевіримо його
Відображайте ім'я

> "Ви хочете сказати, що TYPE_TEXT_VARIATION_VISIBLE_PASSWORD разом із TYPE_TEXT_FLAG_NO_SUGGESTIONS все ще виконує автоматичне завершення на вашому S3?" Так, саме. Хоча також є тип електронної пошти, оскільки це введення електронної пошти…
Відобразити ім’я

20

Для андроїд версії 8.0 або вище цей код не працює, а для автозаповнення перегляду тексту також цей код не працює, тому я запропоную вам використовувати код нижче для відключення пропозицій щодо авто в 8.0 або вище для android vesrion використовувати цю властивість Android для редагування тексту : bitnoForAutofill = "ні"

                   <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 = "ні" :

      <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
Дивовижно! Це було єдине, що працювало на мене.
Лорел Томсон

Єдине, що для мене працює, thx @MaheshKeshvala, прихильне для збереження мого дня.
Раві Ванія

Автозаповнення не є автоматичним заповненням клавіатури, це різні функції. Автозаповнення обробляється ОС, тоді як автоматичним заповненням займається розробник клавіатури (сподіваємось).
milosmns

10

Ви можете вирішити цю проблему, скориставшись цим:

android:importantForAutofill="no" 

Android O має функцію підтримки автоматичного заповнення полів. Просто використовуйте це лише у вашому xml, це вимкне підказки щодо автоматичного заповнення.


7

Оскільки це все ще питання, я збираюся опублікувати цю відповідь. android: inputType = "textVisiblePassword" працює, але це небажано, по-перше, тому що це неправильне представлення вводу, а друге, тому що він вимикає введення жестами!

Натомість мені довелося використовувати BOTH flags textNoSuggesitions and textFilter. Або один не працював.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

TextCapSentences був з інших причин. Але цей вхідний тип утримував натискання пальцем і відключав панель інструментів пропозицій.


7

Я отримував цю річ на телефонах Samsung під управлінням 4.4.4. Це вирішило мою проблему

android:inputType="text|textVisiblePassword|textNoSuggestions"

Те саме на Samsung під керуванням 8.1. Єдине, що працювало для мене: android: inputType = "textVisiblePassword | textNoSuggesitions"
Ейно Гурдін

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

2
Домовились, використовуйте константу не значення
David Snabel-Caunt

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

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


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