Autosuggest für EditText deaktivieren?

123

Gibt es eine Möglichkeit, die Autosuggest-Liste, die während der Eingabe von EditText angezeigt wird, programmgesteuert zu deaktivieren?

nikib3ro
quelle

Antworten:

122

Ich hatte die gleiche Frage, wollte diese Option aber dennoch in meiner XML-Datei festlegen, sodass ich etwas mehr Nachforschungen anstellte, bis ich es selbst herausfand.

Fügen Sie diese Zeile in Ihren EditText ein.

android:inputType="textFilter" 

Hier ist ein Tipp. Verwenden Sie diese Zeile, wenn Sie die Eingabetaste verwenden möchten.

android:inputType="textFilter|textMultiLine"
glr
quelle
HABE MEINE UPVOTE! Eigentlich funktioniert das sehr gut, wenn Sie einen EditText wie eine Textansicht aussehen lassen möchten.
sir_k
1
Funktioniert auch nicht in einigen Android 4.4-Handys
voghDev
API 24 / Android 7.0: Ich habe android:inputType="textPersonName"den vorgeschlagenen Text ersetzt, aber es wird weiterhin die Vorschlagszeile angezeigt (mit dem Mikrofonsymbol).
Neph
120
android:inputType="textNoSuggestions"  

auch würden Sie besser lesen diese

Kreker
quelle
5
Beachten Sie, dass "textNoSuggestions" nur für API 5 und höher funktioniert.
glr
89
@gyller hast du ein Gerät mit einer API von weniger als 5 gesehen?
Kreker
15
0,23% meiner Benutzer sind auf 1.6 (API Level 4). :)
Jeremy Logan
1
Allerdings verlieren Sie dann die ENTER-Taste. Wenn Sie in der Lage sein möchten, ENTERs android zu verwenden: inputType = "textNoSuggestions | textMultiLine"
barlop
3
Es deaktiviert Vorschläge, zeigt aber weiterhin die Vorschlagszeile an (enthält eine Mikrofonoption).
VipulKumar
61
android:inputType="textVisiblePassword" 

klappt wunderbar

Mr_Hmp
quelle
3
Ich würde diesen Weg nicht gehen. Es ist ein Hack und Sie erwähnen nicht, welche anderen Funktionen der Tastatur sich ändern können, wenn Sie mitteilen, dass es sich um ein Passwort handelt. Verwenden Sie "text | textNoSuggestions".
Michael Peterson
2
@ P1X3L5 textNoSuggestions funktioniert nicht für viele Geräte. Leider ist dieser Hack notwendig, bis Google das behebt
Tariq
1
Für mich war es besser, es entfernt auch den Streifen über der Tastatur (Nexus 5), der nicht für alle Geräte gelten muss, aber für einige Benutzer eine bessere Leistung bietet (es
deaktiviert
1
Dies hat dazu beigetragen, das .am Ende des Wortes hinzugefügte Punktzeichen zu entfernen, wenn zwei Leerzeichen nach diesem Wort eingegeben werden. Ich habe es für die Aktionsleiste searchView ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo
Dies ist die einzige Lösung, die für mich funktioniert hat. Andere Antworten funktionieren nicht, wenn Sie sich durch ein Formular bewegen und zu einem Feld zurückkehren. Google ist so ein Haufen Dopes. Freigabe derart einfacher Funktionen, die unvollständig und schlecht getestet sind.
AngryITguy
41

Möglichkeiten, es zu tun:

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

Wenn Sie bereits einige Flags gesetzt haben, dann:

  1. Programmatisch
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
quelle
22

Der zuverlässigste Ansatz, den ich gefunden habe, um die automatische Vervollständigung loszuwerden, ist die Verwendung

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

auf Ihrem EditText-Steuerelement. Wie Charlie in einer anderen Antwort auf dieser Seite berichtet hat,

android:inputType="textVisiblePassword"

ist die XML-Version dieses Flags.

Sie können diese Flagge mit kombinieren

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

Ich hatte InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS ohne InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD verwendet, was für die meisten Telefone funktionierte, aber dann stieß ich auf ein Samsung-Telefon, für das ich immer noch eine automatische Vervollständigung erhielt.

Android deaktiviert programmgesteuert automatisch die automatische Vervollständigung / Autosuggest für EditText im Emulator

was die Verwendung von InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD vorschlug.

Ich habe dies versucht (zusammen mit InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) und es hat funktioniert. Sie können , warum auch ein Telefon sehen , die nicht den Hinweis nehmen könnten , dass Sie nicht möchten , dass die automatische Vervollständigung würde haben , um es für ein Passwort - Feld deaktiviert sein zu können. Wenn wir nicht den Atem anhalten, ist dies möglicherweise der beste Weg, um das zu erreichen, was wir von solchen Telefonen erwarten.

Auf einigen meiner Geräte wurde die Schriftart durch dieses Flag geringfügig geändert - am deutlichsten, um eine Null (0) von einem Oh (O) deutlicher zu unterscheiden, was offensichtlich für die Anzeige eines Passworts wichtig wäre. Aber zumindest hat es funktioniert und die neue Schriftart war nicht unattraktiv.

Obwohl der Beitrag, auf dem ich diesen Vorschlag gefunden habe, alt war, war das Telefon, auf dem ich getestet habe, sehr neu - ein Samsung Galaxy Note II (SPH-L900) mit Android 4.1.2 von Sprint. Die ausgewählte Tastatur war "Samsung-Tastatur", und anscheinend war dies die Standardeinstellung für dieses Telefon, als der Kunde sie von Sprint erhielt. Dieses Problem hat sich also offenbar über die Jahre hinweg zumindest für einige der wichtigen Samsung-Handys fortgesetzt.

Für diejenigen unter Ihnen, die wie ich kein Samsung-Testgerät haben, könnte dies eine wichtige Information sein.

Carl
quelle
3
Funktioniert nicht mit Samsung S3 mit der heutigen Firmware. Hoppla.
Anzeigename
@SargeBorsch: Wollen Sie damit sagen, dass TYPE_TEXT_VARIATION_VISIBLE_PASSWORD zusammen mit TYPE_TEXT_FLAG_NO_SUGGESTIONS immer noch eine automatische Vervollständigung auf Ihrem S3 ausführt? Verwenden Sie die Standardtastatur? Ich habe keinen S3, habe aber in der Vergangenheit meine App (die den oben beschriebenen Ansatz verwendet) auf einem S3 ausprobiert und es gab keine automatische Vervollständigung. Ich habe ein S4 mit Android 4.4 (Cyanogenmod) und es wird auch nicht automatisch vervollständigt.
Carl
@SargeBorsch: Wenn Sie eine App ausprobieren möchten, die den oben genannten Ansatz auf Ihrem S3 verwendet, ist hier meine: play.google.com/store/apps/… Würde mich interessieren, ob das Feld "Word prüfen" unten angezeigt wird Die App (die die oben genannten Flags verwendet) versucht, die automatische Vervollständigung auf Ihrem Gerät durchzuführen. TIA.
Carl
Vielen Dank, werde es bald überprüfen
Anzeigename
> "Wollen Sie damit sagen, dass TYPE_TEXT_VARIATION_VISIBLE_PASSWORD zusammen mit TYPE_TEXT_FLAG_NO_SUGGESTIONS immer noch eine automatische Vervollständigung auf Ihrem S3 ausführt?" Ja genau. Obwohl es auch einen E-Mail-Typ gibt, weil es sich um eine E-Mail-Eingabe handelt…
Anzeigename
20

Für die Android-Version 8.0 oder höher funktioniert dieser Code nicht und für die automatische Vervollständigung der Textansicht funktioniert auch dieser Code nicht. Daher empfehle ich Ihnen, den folgenden Code für die Deaktivierung der automatischen Vorschläge in Version 8.0 oder höher zu verwenden. Android vesrion Verwenden Sie diese Eigenschaft von edittext android: wichtigForAutofill = "nein"

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

und für die AutoComplete-Textansicht wie diese verwenden Sie dieses Feld, um den automatischen Vorschlag zu deaktivieren 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
quelle
2
Genial! Dies war das einzige, was für mich funktioniert hat.
Laurel Thomson
Das einzige, was für mich funktioniert, danke @MaheshKeshvala, das für die Rettung meines Tages positiv bewertet wurde.
Ravi Vaniya
Das automatische Ausfüllen ist keine automatische Vervollständigung der Tastatur, es handelt sich um verschiedene Funktionen. Das automatische Ausfüllen wird vom Betriebssystem übernommen, während das automatische Ausfüllen (hoffentlich) vom Tastaturentwickler übernommen wird.
Milosmns
10

Sie können dieses Problem folgendermaßen lösen:

android:importantForAutofill="no" 

Android O bietet die Funktion zum automatischen Ausfüllen von Feldern. Verwenden Sie diese Funktion nur in Ihrer XML-Datei. Dadurch werden Hinweise zum automatischen Ausfüllen deaktiviert

eifriger Prinz
quelle
7

Da dies immer noch ein Problem ist, werde ich diese Antwort veröffentlichen. android: inputType = "textVisiblePassword" funktioniert, ist jedoch unerwünscht, zum einen, weil die Eingabe falsch dargestellt wird, und zum anderen, weil dadurch die Gesteneingabe deaktiviert wird!

Stattdessen musste ich BEIDE Flags textNoSuggestions und textFilter verwenden. Entweder hat einer alleine nicht funktioniert.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

Die textCapSentences waren aus anderen Gründen. Dieser inputType behielt jedoch die Swipe-Eingabe bei und deaktivierte die Vorschlagsymbolleiste.

Tariq
quelle
7

Ich habe dieses Ding auf Samsung-Handys mit 4.4.4 bekommen. Dies löste mein Problem

android:inputType="text|textVisiblePassword|textNoSuggestions"
Ajji
quelle
Gleiches gilt für Samsung mit 8.1. Das einzige, was für mich funktioniert hat, war Android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin
4

OK, das Problem war - in Eclipse erhalten Sie keinen Vorschlag für ein Flag mit dem Namen: textNoSuggestion

Und Sie können es nicht in main.xml (wo Sie die Benutzeroberfläche entwerfen) festlegen, da dieses Attribut für inputType nicht erkannt wird. Sie können es also mit int const im Code festlegen:

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

Und danke jasta00, dass du mir geholfen hast, eine Antwort auf diese Frage zu finden.

nikib3ro
quelle
6
Dies erledigt den Job ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
w.donahue
2
Einverstanden, verwenden Sie die Konstante nicht den Wert
David Snabel-Caunt
1
@ kape123 Sie können android: inputType = "textNoSuggestions" in XML nicht festlegen, da Ihr Build-Ziel niedriger als 5 ist. api
kreker
Beachten Sie, dass bei einigen Samsung-Handys die automatische Vervollständigung der Standardtastatur durch InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS nicht deaktiviert wird. Eine Person schlägt vor, InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD in diesem ziemlich alten Beitrag zu verwenden: stackoverflow.com/questions/6281514/…
Carl
2
android:inputType="text|textNoSuggestions"
Michael Peterson
quelle
1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Das wird dir helfen.

Thomas VJ
quelle
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
quelle
0

Sie können einfach die EditText- setThreshold()Methode verwenden. Stellen Sie den Schwellenwert auf 100 ein, wenn Sie keine Vorhersagen anzeigen möchten. Wenn Sie die Anzeige von Vorhersagen wieder aktivieren möchten, setzen Sie sie je nach Bedarf auf einen kleinen Wert wie 1 oder 2 zurück.

Kaolick
quelle
Es gibt kein setThreshold () für EditText. Können Sie das bitte erklären?
siehe