Wyłączyć autosugestię dla EditText?

123

Czy istnieje sposób na programowe wyłączenie listy autosugestów, która pojawia się podczas wpisywania tekstu w EditText?

nikib3ro
źródło

Odpowiedzi:

122

Miałem to samo pytanie, ale nadal chciałem ustawić tę opcję w moim pliku XML, więc poszukałem trochę więcej informacji, dopóki sam tego nie odkryłem.

Dodaj tę linię do swojego EditText.

android:inputType="textFilter" 

Tutaj jest wskazówka. Użyj tego wiersza, jeśli chcesz mieć możliwość użycia klawisza „enter”.

android:inputType="textFilter|textMultiLine"
glr
źródło
ZAPRASZAMY! W rzeczywistości działa to naprawdę dobrze, gdy chcesz, aby EditText wyglądał jak textView.
sir_k,
1
Nie działa również na kilku telefonach z Androidem 4.4
voghDev
API 24 / Android 7.0: Zastąpiłem android:inputType="textPersonName"sugerowanym tekstem, ale nadal wyświetla wiersz sugestii (z ikoną mikrofonu).
Neph
120
android:inputType="textNoSuggestions"  

też lepiej to przeczytaj

kreker
źródło
5
Pamiętaj, że „textNoSuggestions” działa tylko w przypadku interfejsu API 5 i nowszych.
glr
89
@gyller Czy widziałeś jakieś urządzenie z API mniejszym niż 5?
kreker
15
0,23% moich użytkowników ma wersję 1.6 (poziom API 4). :)
Jeremy Logan
1
Chociaż wtedy zgubisz klawisz ENTER. Jeśli chcesz mieć możliwość używania ENTERs android: inputType = "textNoSuggestions | textMultiLine"
barlop
3
Wyłącza sugestie, ale nadal wyświetla wiersz sugestii (zawiera opcję mikrofonu).
VipulKumar,
61
android:inputType="textVisiblePassword" 

działa jak marzenie

Mr_Hmp
źródło
3
Nie poszedłbym tą trasą. To hack i nie wspominasz o innych funkcjach klawiatury, które mogą się zmienić, gdy powiesz, że jest to hasło. Użyj „text | textNoSuggestions”.
Michael Peterson
2
@ P1X3L5 textNoSuggestions nie działa na wielu urządzeniach. Niestety ten hack jest konieczny, dopóki Google to nie naprawi
Tariq
1
jak dla mnie było lepiej, usuwa też listwę nad klawiaturą (nexus 5) co nie musi być prawdą dla wszystkich urządzeń ale daje lepszą wydajność dla niektórych użytkowników (wyłącza też możliwość wprowadzania mowy)
Arkadiusz Cieśliński
1
działało to w celu usunięcia .znaku kropki dodanego na końcu słowa, jeśli po tym słowie zostaną wstawione dwie spacje. Użyłem go do wyszukiwania paska akcji ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo
To jedyne rozwiązanie, które u mnie zadziałało. Inne odpowiedzi nie działają podczas poruszania się po formularzu i powrotu do pola. Google to kupa ćpunów. Wydawanie tak prostych funkcji, które są niekompletne i słabo przetestowane.
angryITguy
41

Sposoby na to:

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

Jeśli masz już ustawione flagi, to:

  1. Programowo
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"
Enzokie
źródło
22

Najbardziej niezawodnym podejściem do pozbycia się autouzupełniania, jakie znalazłem, jest użycie

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

w kontrolce EditText. Jak podał Charlie w innej odpowiedzi na tej stronie,

android:inputType="textVisiblePassword"

jest wersją XML tej flagi.

Możesz połączyć tę flagę z

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

Używałem InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS bez InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, który działał w przypadku większości telefonów, ale potem natknąłem się na telefon Samsung, dla którego nadal otrzymywałem autouzupełnianie.

Android programowo wyłącza autouzupełnianie / autosugestię dla EditText w emulatorze

co sugerowało użycie InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

Próbowałem tego (wraz z InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) i zadziałało. Można zrozumieć, dlaczego nawet telefon, który nie może wziąć wskazówkę, że nie chcesz autouzupełnianie będzie mieć aby mogła ona być wyłączona na polu hasła. Bez wstrzymywania oddechu może to być najlepszy sposób na uzyskanie tego, czego chcemy od takich telefonów.

Na niektórych moich urządzeniach czcionka została nieznacznie zmieniona przez tę flagę - najbardziej zauważalnie, aby wyraźniej odróżnić zero (0) od Oh (O), co oczywiście byłoby ważne przy wyświetlaniu hasła. Ale przynajmniej zadziałało, a nowa czcionka nie była nieatrakcyjna.

Mimo że post, w którym znalazłem tę sugestię, był stary, telefon, na którym testowałem, był bardzo nowy - Samsung Galaxy Note II (SPH-L900) z Androidem 4.1.2 firmy Sprint. Wybrano klawiaturę „Samsung Keyboard” i najwyraźniej była to domyślna klawiatura tego telefonu, gdy klient otrzymał ją od Sprint. Tak więc ten problem najwyraźniej utrzymuje się przez lata przynajmniej w przypadku niektórych ważnych linii telefonów Samsung.

Dla tych z Was, którzy tak jak ja nie mają urządzenia testowego Samsunga, może to być ważna informacja.

Carl
źródło
3
Nie działa na Samsung S3 z dzisiejszym oprogramowaniem. Ups.
Nazwa wyświetlana
@SargeBorsch: Czy twierdzisz, że TYPE_TEXT_VARIATION_VISIBLE_PASSWORD wraz z TYPE_TEXT_FLAG_NO_SUGGESTIONS nadal wykonuje automatyczne uzupełnianie na Twoim S3? Tak, czy używasz standardowej klawiatury? Nie mam S3, ale w przeszłości wypróbowałem moją aplikację (która wykorzystuje powyższe podejście) na S3 i nie było autouzupełniania. Mam S4 z systemem Android 4.4 (Cyanogenmod) i również nie kończy się automatycznie.
Carl
@SargeBorsch: Jeśli chciałbyś wypróbować aplikację, która wykorzystuje powyższe podejście na swoim S3, oto moje: play.google.com/store/apps/ ... Chciałbym usłyszeć, czy pole Sprawdź słowo na dole tego app (która używa powyższych flag) próbuje automatycznie uzupełnić na Twoim urządzeniu. TIA.
Carl
Dzięki, wkrótce to sprawdzę
wyświetlana nazwa
> „Czy twierdzisz, że TYPE_TEXT_VARIATION_VISIBLE_PASSWORD wraz z TYPE_TEXT_FLAG_NO_SUGGESTIONS nadal wykonuje autouzupełnianie na Twoim S3?” Tak, dokładnie. Chociaż istnieje również typ e-mail, ponieważ jest to adres e-mail…
Wyświetlana nazwa
20

W przypadku systemu Android w wersji 8.0 lub nowszej ten kod nie działa, a dla autouzupełniania tekstowego również ten kod nie działa, więc zasugeruję użycie poniższego kodu dla opcji Wyłącz automatyczne sugestie w wersji 8.0 lub nowszej Android Vesrion, użyj tej właściwości edittext android: ważneForAutofill = "nie"

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

a w przypadku widoku tekstowego autouzupełniania, takiego jak ten, użyj tego pola, aby wyłączyć automatyczne sugestie 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" />
Mahesh Keshvala
źródło
2
Niesamowite! To była jedyna rzecz, która działała dla mnie.
Laurel Thomson,
Jedyna rzecz, która działa dla mnie, dzięki @MaheshKeshvala, za uratowanie mi dnia.
Ravi Vaniya
Autouzupełnianie nie jest autouzupełnianiem klawiatury, są to różne funkcje. Autouzupełnianie jest obsługiwane przez system operacyjny, podczas gdy autouzupełnianie jest obsługiwane przez programistę klawiatury (miejmy nadzieję).
milosmns
10

Możesz rozwiązać ten problem, używając tego:

android:importantForAutofill="no" 

Android O ma funkcję obsługi automatycznego wypełniania pól, po prostu używaj tego tylko w swoim xml, wyłączy podpowiedzi autouzupełniania

chętny książę
źródło
7

Ponieważ nadal jest to problem, opublikuję tę odpowiedź. android: inputType = "textVisiblePassword" działa, ale jest niepożądany, po pierwsze dlatego, że jest to błędne przedstawienie danych wejściowych, a po drugie, ponieważ wyłącza pisanie gestami!

Zamiast tego musiałem użyć OBU flag textNoSuggestions i textFilter. Ani jeden, ani jeden nie działał.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

Tekst textCapSentences był z innych powodów. Ale ten typ inputType zachował pisanie przeciągnięciem i wyłączył pasek narzędzi sugestii.

Tariq
źródło
7

Dostawałem to na telefonach Samsung z systemem 4.4.4. To rozwiązało mój problem

android:inputType="text|textVisiblePassword|textNoSuggestions"
Ajji
źródło
To samo dotyczy Samsunga z systemem 8.1. Jedyną rzeczą, która działała dla mnie, był android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin
4

OK, problem polegał na tym, że w Eclipse nie otrzymujesz propozycji flagi o nazwie: textNoSuggestion

I nie możesz go ustawić w main.xml (gdzie projektujesz interfejs użytkownika), ponieważ ten atrybut dla inputType nie jest rozpoznawany. Możesz więc ustawić to w kodzie za pomocą int const:

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

Dziękuję jasta00 za pomoc w znalezieniu odpowiedzi na to pytanie.

nikib3ro
źródło
6
To wykonuje zadanie ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Donahue
2
Zgoda, użyj stałej, a nie wartości
David Snabel-Caunt
1
@ kape123 Nie możesz ustawić android: inputType = "textNoSuggestions" w xml, ponieważ wartość docelowa kompilacji jest niższa niż 5 api
kreker
Zwróć uwagę, że w przypadku niektórych telefonów Samsung standardowe autouzupełnianie klawiatury nie jest wyłączane przez InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Jedna osoba sugeruje użycie InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD w tym dość starym poście: stackoverflow.com/questions/6281514/…
Carl
2
android:inputType="text|textNoSuggestions"
Michael Peterson
źródło
1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

To ci pomoże.

Thomas VJ
źródło
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);
    }
Maxime Mbabele
źródło
0

Możesz po prostu użyć metody EditText setThreshold(). Ustaw próg na powiedzmy 100, gdy nie chcesz wyświetlać prognoz. Jeśli chcesz ponownie aktywować wyświetlanie podpowiedzi, ustaw ją z powrotem na małą wartość int, taką jak 1 lub 2, w zależności od potrzeb.

kaolick
źródło
nie ma metody setThreshold () dla EditText, czy możesz wyjaśnić?
behelit