Disattivare suggerimenti automatici per EditText?


123

C'è un modo per disattivare a livello di programmazione l'elenco di suggerimenti automatici che viene visualizzato durante la digitazione in EditText?

Risposte:


122

Avevo la stessa domanda, ma volevo comunque impostare questa opzione nel mio file XML, quindi ho fatto un po 'più di ricerca finché non l'ho scoperto da solo.

Aggiungi questa riga al tuo EditText.

android:inputType="textFilter" 

Ecco un suggerimento. Usa questa riga se vuoi essere in grado di usare il tasto "invio".

android:inputType="textFilter|textMultiLine"

ABBIA IL MIO VOTO! In realtà questo funziona molto bene quando vuoi far sembrare un EditText come un textView.
sir_k

1
Non funziona nemmeno su un paio di telefoni Android 4.4
voghDev

API 24 / Android 7.0: ho sostituito android:inputType="textPersonName"con il testo suggerito ma mostra ancora la riga dei suggerimenti (con l'icona del microfono).
Neph

120
android:inputType="textNoSuggestions"  

anche tu faresti meglio a leggere questo


5
Tieni presente che "textNoSuggestions" funziona solo per API 5 e versioni successive.
glr

89
@gyller hai visto qualche dispositivo con API inferiore a 5?
kreker

15
Lo 0,23% dei miei utenti utilizza 1.6 (livello API 4). :)
Jeremy Logan

1
Anche se poi perdi il tasto INVIO. Se vuoi essere in grado di utilizzare gli ENTER, android: inputType = "textNoSuggestions | textMultiLine"
barlop

3
Disabilita i suggerimenti ma mostra ancora la riga dei suggerimenti (contiene un'opzione microfono).
VipulKumar

61
android:inputType="textVisiblePassword" 

funziona come un fascino


3
Non andrei su questa strada. È un trucco e non dici quali altre caratteristiche della tastiera potrebbero cambiare quando dici che è per la password. Usa "text | textNoSuggestions".
Michael Peterson

2
@ P1X3L5 textNoSuggestions non funziona per molti dispositivi. Sfortunatamente questo hack è necessario fino a quando Google non lo risolve
Tariq

1
per me era meglio, rimuove anche la striscia sopra la tastiera (nexus 5) che non deve essere vera per tutti i dispositivi ma offre prestazioni migliori per alcuni utenti (disattiva anche la capacità di input vocale)
Arkadiusz Cieśliński

1
questo ha funzionato per rimuovere il .carattere punto aggiunto alla fine della parola se due spazi vengono digitati dopo quella parola. L'ho usato per la barra delle azioni searchView ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo

Questa è l'unica soluzione che ha funzionato per me. Altre risposte non funzionano quando ci si sposta in un modulo e si torna in un campo. Google è un tale gruppo di stupidi. Rilascio di funzionalità così semplici che sono incomplete e scarsamente testate.
angryITguy

41

Modi per farlo:

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

Se hai già impostato alcuni flag, allora:

  1. programatically
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

L'approccio più affidabile che ho trovato per sbarazzarmi del completamento automatico è usare

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

sul controllo EditText. Come ha riportato Charlie in una risposta diversa in questa pagina,

android:inputType="textVisiblePassword"

è la versione XML di questo flag.

Puoi combinare questa bandiera con

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

Stavo usando InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS senza InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, che ha funzionato per la maggior parte dei telefoni, ma poi mi sono imbattuto in un telefono Samsung per il quale stavo ancora ottenendo il completamento automatico.

Android disabilita a livello di programmazione il completamento automatico / suggerimenti automatici per EditText nell'emulatore

che ha suggerito di utilizzare InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

Ho provato questo (insieme a InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) e ha funzionato. Si può capire perché anche un telefono che potrebbe non prendere il suggerimento che non si vuole completamento automatico potrebbe avere per permettere che sia disattivata per un campo password. A corto di trattenere il respiro, questo potrebbe essere il modo migliore per ottenere ciò che vogliamo da questi telefoni.

Su alcuni dei miei dispositivi, il carattere è stato leggermente modificato da questo flag, in modo più evidente per distinguere più chiaramente uno zero (0) da un Oh (O), il che ovviamente sarebbe importante per la visualizzazione di una password. Ma almeno ha funzionato e il nuovo carattere non era poco attraente.

Anche se il post su cui ho trovato questo suggerimento era vecchio, il telefono su cui ho provato era molto recente: un Samsung Galaxy Note II (SPH-L900) Android 4.1.2 di Sprint. La tastiera selezionata era "Samsung Keyboard" e apparentemente questa era l'impostazione predefinita per questo telefono quando il cliente l'ha ricevuta da Sprint. Quindi questo problema apparentemente è persistito nel corso degli anni almeno per alcune delle importanti linee di telefoni Samsung.

Per quelli di voi che, come me, non hanno un dispositivo di prova Samsung, questa potrebbe essere un'informazione importante.


3
Non funziona su Samsung S3 con il firmware di oggi. Ops.
Nome visualizzato

@SargeBorsch: stai dicendo che TYPE_TEXT_VARIATION_VISIBLE_PASSWORD insieme a TYPE_TEXT_FLAG_NO_SUGGESTIONS esegue ancora un completamento automatico sul tuo S3? Allora, stai usando la tastiera di serie? Non ho un S3 ma ho provato la mia app (che utilizza l'approccio di cui sopra) su un S3 in passato e non c'era il completamento automatico. Ho un S4 con Android 4.4 (Cyanogenmod) e inoltre non si completa automaticamente.
Carl

@SargeBorsch: se desideri provare un'app che utilizza l'approccio di cui sopra sul tuo S3, ecco la mia: play.google.com/store/apps/… Sarei interessato a sapere se il campo Controlla parola in fondo l'app (che utilizza i flag sopra) tenta di completarsi automaticamente sul tuo dispositivo. TIA.
Carl

Grazie, controlleremo presto
Nome visualizzato

> "Stai dicendo che TYPE_TEXT_VARIATION_VISIBLE_PASSWORD insieme a TYPE_TEXT_FLAG_NO_SUGGESTIONS eseguono ancora un completamento automatico sul tuo S3?" Si, esattamente. Sebbene ci sia anche il tipo di posta elettronica, perché è un ingresso di posta elettronica ...
Nome visualizzato

20

Per la versione Android 8.0 o successiva questo codice non funziona e per la visualizzazione del testo con completamento automatico anche questo codice non funziona, quindi ti suggerirò di utilizzare il codice seguente per Disabilitare i suggerimenti automatici in 8.0 o versioni successive Android vesrion usa questa proprietà di 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" />

e per la visualizzazione del testo di completamento automatico come questa, utilizza questo campo per disabilitare il suggerimento automatico 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" />

2
Eccezionale! Questa è stata l'unica cosa che ha funzionato per me.
Laurel Thomson

L'unica cosa che funziona per me, grazie @MaheshKeshvala, votato per avermi salvato la giornata.
Ravi Vaniya il

Il riempimento automatico non è il completamento automatico della tastiera, sono caratteristiche diverse. Il riempimento automatico è gestito dal sistema operativo, mentre il completamento automatico è gestito dallo sviluppatore della tastiera (si spera).
milosmns

11

Puoi risolvere questo problema usando questo:

android:importantForAutofill="no" 

Android O ha la funzione di supportare il riempimento automatico per i campi, usalo solo nel tuo xml, disabiliterà i suggerimenti di compilazione automatica


ha funzionato solo per me .... Grazie
Akash kumar

7

Poiché questo è ancora un problema, posterò questa risposta. android: inputType = "textVisiblePassword" funziona ma non è desiderabile, in primo luogo perché rappresenta una falsa rappresentazione dell'input e in secondo luogo perché disabilita la digitazione gestuale!

Invece ho dovuto usare ENTRAMBI i flag textNoSuggestions e textFilter. Nessuno dei due da solo non ha funzionato.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

Il textCapSentences era per altri motivi. Ma questo inputType ha mantenuto la digitazione a scorrimento e disabilitato la barra degli strumenti dei suggerimenti.


7

Stavo ricevendo questa cosa sui telefoni Samsung con 4.4.4. Questo ha risolto il mio problema

android:inputType="text|textVisiblePassword|textNoSuggestions"

Lo stesso su Samsung con 8.1. L'unica cosa che ha funzionato per me era android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin

4

OK, il problema era: in Eclipse non si ottengono suggerimenti per la bandiera denominata: textNoSuggestion

E non puoi impostarlo in main.xml (dove progetti l'interfaccia utente) perché quell'attributo per inputType non è riconosciuto. Quindi puoi impostarlo nel codice usando int const:

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

E grazie jasta00 per avermi aiutato a capire la risposta per questo.


6
Questo fa il lavoro ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
w.donahue

2
D'accordo, usa la costante non il valore
David Snabel-Caunt

1
@ kape123 Non puoi impostare android: inputType = "textNoSuggestions" in xml perché il tuo obiettivo di build è inferiore a 5 api
kreker

Tieni presente che per alcuni telefoni Samsung il completamento automatico della tastiera standard non viene disattivato da InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Una persona suggerisce di utilizzare InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD in questo post piuttosto vecchio: stackoverflow.com/questions/6281514/…
Carl


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

Questo ti aiuterà.


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

Potresti semplicemente usare il setThreshold()metodo EditText . Imposta la soglia su diciamo 100 quando non vuoi mostrare previsioni. Se desideri riattivare la visualizzazione delle previsioni, impostalo su un piccolo int come 1 o 2 a seconda delle tue esigenze.


non c'è setThreshold () per EditText, puoi spiegare?
behelit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.