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

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

17 ответов

Решение

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

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

android:inputType="textFilter" 

Вот совет. Используйте эту строку, если хотите использовать клавишу "Ввод".

android:inputType="textFilter|textMultiLine"
android:inputType="textNoSuggestions"  

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

android:inputType="textVisiblePassword" 

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

  1. Programatically

    edittext.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
    
  2. XML

    android:inputType="textNoSuggestions|textVisiblePassword"
    

Для версии Android 8.0 или выше этот код не работает, а для текстового просмотра автозаполнения также этот код не работает, поэтому я предлагаю вам использовать приведенный ниже код для Отключить автоматическое предложение в версии 8.0 или выше для Android, используйте это свойство 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" />

и для текстового представления автозаполнения, подобного этому, используйте это поле, чтобы отключить автоматическое предложение 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" />

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

android:importantForAutofill="no" 

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

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

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, это может быть важной информацией.

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

      android:importantForAutofill="no" 
android:inputType="none|textNoSuggestions"

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

android:inputType="text|textVisiblePassword|textNoSuggestions"

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

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

android:inputType="textCapSentences|textFilter|textNoSuggestions"

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

ОК, проблема была - в Eclipse вы не получите подсказку для флага с именем: textNoSuggestion

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

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

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

    // 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);
    }
android:inputType="text|textNoSuggestions"
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

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

если вам не нужны предложения, вы можете использовать «none»

android:inputType="none|числодесятичных"

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

Найдите хорошее решение для автоматических предложений с помощью TextWatcher. Предложения будут отображаться для пользователя, но пользователь не сможет их принять.

      /*...*/

editText.addTextChangedListener(textWatcher);

/*...*/
}

private final TextWatcher textWatcher = new TextWatcher() {
    
    long timestamp = 0L;
    
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (count - before > 1 && timestamp < System.currentTimeMillis()) { // disable suggestions click
            String str = s.toString();
            str = str.substring(0, start) + str.substring(start + count - 1, str.length() - 1);
            timestamp = System.currentTimeMillis() + 20;
            inputText.setText(str);
            inputText.setSelection(inputText.getText().length());
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
};

Также это хорошо работает, когда вам не нужен долгий щелчок с функцией копирования / вставки.

Другие вопросы по тегам