Desativar sugestão automática para EditText?

123

Existe uma maneira de desativar programaticamente a lista de sugestão automática que aparece quando você digita EditText?

nikib3ro
fonte

Respostas:

122

Eu tinha a mesma pergunta, mas ainda queria definir essa opção no meu arquivo XML, então pesquisei um pouco mais até descobrir.

Adicione esta linha ao seu EditText.

android:inputType="textFilter" 

Aqui esta uma sugestao. Use esta linha se desejar poder usar a tecla "enter".

android:inputType="textFilter|textMultiLine"
glr
fonte
TENHO MINHA ATUAÇÃO! Na verdade, isso funciona muito bem quando você deseja fazer com que um EditText pareça um textView.
sir_k
1
Não funciona em um par de Android 4.4 telefones quer
voghDev
API 24 / Android 7.0: substituí android:inputType="textPersonName"pelo texto sugerido, mas ele ainda exibe a linha de sugestões (com o ícone do microfone).
Neph
120
android:inputType="textNoSuggestions"  

Também é melhor você ler isso

kreker
fonte
5
Observe que "textNoSuggestions" funciona apenas para a API 5 e superior.
glr
89
@gyller você viu algum dispositivo com API menor que 5?
Kreker
15
0,23% dos meus usuários estão no 1.6 (nível 4 da API). :)
Jeremy Logan
1
Embora você perca a tecla ENTER. Se você quiser usar ENTERs android: inputType = "textNoSuggestions | textMultiLine"
barlop
3
Desativa as sugestões, mas ainda mostra a linha de sugestões (tem uma opção de microfone).
VipulKumar
61
android:inputType="textVisiblePassword" 

Funciona como um encanto

Mr_Hmp
fonte
3
Eu não iria por esse caminho. É um truque e você não menciona que outros recursos do teclado podem mudar quando você diz que é para senha. Use "text | textNoSuggestions".
Michael Peterson
2
@ P1X3L5 textNoSuggestions não funciona para muitos dispositivos. Infelizmente, esse truque é necessário até que o Google conserte isso
Tariq
1
para mim foi melhor, também remove a faixa acima do teclado (nexus 5), que não precisa ser verdadeira para todos os dispositivos, mas oferece melhor desempenho para alguns usuários (também desativa a capacidade de entrada de fala)
Arkadiusz Cieśliński
1
Isso funcionou para remover o .caractere de período adicionado no final da palavra se dois espaços forem digitados após essa palavra. Usei-o para a Procura ação bar ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo
Esta é a única solução que funcionou para mim. Outras respostas não funcionam ao percorrer um formulário e retornar a um campo. O Google é um bando de burros. Liberando recursos simples que são incompletos e mal testados.
precisa saber é o seguinte
41

Maneiras de fazer isso:

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

Se você já possui alguns sinalizadores definidos, então:

  1. Programaticamente
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
fonte
22

A abordagem mais confiável que encontrei para me livrar do preenchimento automático é usar

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

no seu controle EditText. Como charlie relatou em uma resposta diferente nesta página,

android:inputType="textVisiblePassword"

é a versão XML desse sinalizador.

Você pode combinar esta bandeira com

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

Eu estava usando InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS sem InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, que funcionava para a maioria dos telefones, mas me deparei com um telefone Samsung para o qual eu ainda estava obtendo o preenchimento automático.

O Android desabilita programaticamente o preenchimento automático / sugestão automática para EditText no emulador

que sugeriu o uso de InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

Eu tentei isso (junto com InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) e funcionou. Você pode ver por que mesmo um telefone que talvez não entenda que não deseja o preenchimento automático teria que permitir que ele fosse desativado para um campo de senha. Com falta de ar, esta pode ser a melhor maneira de obter o que queremos de tais telefones.

Em alguns dos meus dispositivos, a fonte foi ligeiramente alterada por esse sinalizador - mais visivelmente para distinguir um zero (0) de um Oh (O) mais claramente, o que obviamente seria importante para exibir uma senha. Mas pelo menos funcionou, e a nova fonte não era atraente.

Embora o post em que eu encontrei essa sugestão fosse antigo, o telefone em que testei era muito recente - um Android 4.1.2 da Samsung Galaxy Note II (SPH-L900) da Sprint. O teclado selecionado era "Teclado Samsung" e, aparentemente, esse era o padrão para este telefone quando o cliente o recebeu da Sprint. Portanto, esse problema aparentemente persistiu ao longo dos anos em pelo menos parte da importante linha de telefones Samsung.

Para aqueles de vocês que, como eu, não possuem um dispositivo de teste Samsung, isso pode ser uma informação importante.

Carl
fonte
3
Não funciona no Samsung S3 com o firmware atual. Opa
Exibir nome
@SargeBorsch: Você está dizendo que TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, juntamente com TYPE_TEXT_FLAG_NO_SUGGESTIONS, ainda executa um preenchimento automático no seu S3? Eu sim, você está usando o teclado de ações? Eu não tenho um S3, mas tentei meu aplicativo (que usa a abordagem acima) em um S3 no passado e não havia preenchimento automático. Eu tenho um S4 executando o Android 4.4 (Cyanogenmod) e ele também não é concluído automaticamente.
Carl
@SargeBorsch: se você quiser experimentar um aplicativo que use a abordagem acima no seu S3, aqui está o meu: play.google.com/store/apps/… Gostaria de saber se o campo Verificar palavra na parte inferior desse O aplicativo (que usa os sinalizadores acima) tenta concluir automaticamente no seu dispositivo. TIA.
181 Carl Carl
Obrigado, verificará em breve
Nome para exibição
> "Você está dizendo que TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, juntamente com TYPE_TEXT_FLAG_NO_SUGGESTIONS, ainda executa uma conclusão automática no seu S3?" Sim, exatamente. Embora também exista um tipo de e-mail, porque é uma entrada de e-mail ...
Nome para exibição
20

Para a versão Android 8.0 ou superior, este código não está funcionando e, para o texto de preenchimento automático, também este código não está funcionando, então eu sugiro que você use o código abaixo para a opção Desativar as sugestões automáticas na versão 8.0 ou superior, android vesrion use esta propriedade de 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 para a exibição de texto AutoCompletar como esta, use este campo para desativar a sugestão automática 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
fonte
2
Impressionante! Essa foi a única coisa que funcionou para mim.
Laurel Thomson
A única coisa que funciona para mim, thx @MaheshKeshvala, votou por salvar o meu dia.
Ravi Vaniya 24/01
O preenchimento automático não é preenchido automaticamente pelo teclado, são recursos diferentes. O preenchimento automático é tratado pelo sistema operacional, enquanto o preenchimento automático é tratado pelo desenvolvedor do teclado (espero).
milosmns 4/03
10

Você pode resolver esse problema usando o seguinte:

android:importantForAutofill="no" 

O Android O possui o recurso de suporte ao preenchimento automático de campos. Use apenas isso no seu xml. Ele desativará as dicas de preenchimento automático

ansioso
fonte
7

Como ainda é um problema, vou postar esta resposta. android: inputType = "textVisiblePassword" funciona, mas é indesejável, primeiro porque é uma representação incorreta da entrada e segundo porque desativa a digitação por gestos!

Em vez disso, tive que usar os dois sinalizadores textNoSuggestions e textFilter. Qualquer um sozinho não funcionou.

android:inputType="textCapSentences|textFilter|textNoSuggestions"

O textCapSentences foi por outros motivos. Mas esse inputType manteve a digitação do furto e desabilitou a barra de ferramentas de sugestões.

Tariq
fonte
7

Eu estava conseguindo isso em telefones Samsung executando 4.4.4. Isso resolveu meu problema

android:inputType="text|textVisiblePassword|textNoSuggestions"
Ajji
fonte
O mesmo na Samsung executando 8.1. A única coisa que funcionou para mim foi o android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin
4

OK, o problema era - no Eclipse, você não recebe sugestões para o sinalizador denominado: textNoSuggestion

E você não pode configurá-lo em main.xml (onde você cria a interface do usuário) porque esse atributo para inputType não é reconhecido. Então você pode configurá-lo no código usando int const:

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

E obrigado jasta00 por me ajudar a descobrir a resposta para este.

nikib3ro
fonte
6
Isso faz o trabalho ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Wdonahue 3/08
2
Acordado, use a constante não o valor
David Snabel-Caunt
1
@ kape123 Você não pode definir android: inputType = "textNoSuggestions" em xml, porque o seu destino de compilação é menor do que 5 api
kreker
Observe que, para alguns telefones Samsung, o preenchimento automático do teclado padrão não é desativado pelo InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS. Uma pessoa sugere usar InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD nesta postagem bastante antiga: stackoverflow.com/questions/6281514/…
Carl
2
android:inputType="text|textNoSuggestions"
Michael Peterson
fonte
1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Isso irá ajudá-lo.

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

Você pode simplesmente usar o setThreshold()método do EditText . Defina o limite como digamos 100 quando não desejar mostrar previsões. Se você deseja reativar a exibição de previsões, defina-o como um int pequeno como 1 ou 2, dependendo de suas necessidades.

Kaolick
fonte
não há setThreshold () para EditText, você pode explicar?
precisa saber é