Eu preciso fazer a validação de entrada de formulário em uma série de EditTexts. Estou usando o OnFocusChangeListeners para disparar a validação após o usuário digitar em cada um, mas isso não se comporta conforme o desejado para o último EditText.
Se eu clicar no botão "Concluído" enquanto digito o EditText final, o InputMethod é desconectado, mas tecnicamente o foco nunca é perdido no EditText (e a validação nunca ocorre).
Qual a melhor solução?
Devo monitorar quando o InputMethod se desconecta de cada EditText e não quando o foco muda? Se sim, como?
android
android-edittext
Stefan
fonte
fonte
Respostas:
Por que você não usa
TextWatcher
?Como você tem um número de
EditText
caixas a serem validadas, acho que o seguinte deve atender a você:android.text.TextWatcher
interfaceafterTextChanged(Editable s)
método da seguinte maneiraO
Editable s
realmente não ajuda a descobrir qual o texto de caixa EditText está sendo alterado. Mas você pode verificar diretamente o conteúdo das caixas EditText, comono mesmo método. Espero estar claro e, se estiver, ajuda! :)
EDIT: Para uma abordagem mais limpa, consulte a resposta de Christopher Perry abaixo.
fonte
O TextWatcher é um pouco detalhado para o meu gosto, então eu facilitei algo de engolir:
Apenas use-o assim:
fonte
EditText
IS-ATextView
addTextChangedListener
depois de resolver o seu EditText do ponto de vistaSe você quiser imagens e pop-ups de validação agradáveis quando ocorrer um erro, poderá usar o
setError
método daEditText
classe conforme descrito aquifonte
passwordConfirmTextField
, mas preciso fazer referência ao outropasswordTextField
, para que eu possa compará-lo. Alguma sugestão?Para reduzir a verbosidade da lógica de validação, criei uma biblioteca para Android . Ele cuida da maioria das validações do dia-a-dia usando Anotações e regras internas. Há restrições, como
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
, etc.,Você pode adicionar essas anotações às referências do widget da interface do usuário e executar validações. Também permite realizar validações de forma assíncrona, o que é ideal para situações como verificação de nome de usuário exclusivo de um servidor remoto.
Há um exemplo na página inicial do projeto sobre como usar anotações. Você também pode ler a postagem do blog associado, onde escrevi exemplos de códigos sobre como escrever regras personalizadas para validações.
Aqui está um exemplo simples que descreve o uso da biblioteca.
A biblioteca é extensível, você pode escrever suas próprias regras estendendo a
Rule
classe.fonte
@Length
anotação.Esta foi uma boa solução daqui
fonte
Abordagem atualizada - TextInputLayout:
O Google lançou recentemente a biblioteca de suporte ao design e há um componente chamado TextInputLayout e ele suporta a exibição de um erro via
setErrorEnabled(boolean)
esetError(CharSequence)
.Como usá-lo?
Etapa 1: agrupar seu EditText com TextInputLayout:
Etapa 2: Validar entrada
Eu criei um exemplo no meu repositório Github ; faça o checkout do exemplo, se desejar!
fonte
com.google.android.material.textfield.TextInputLayout
(observe a mudança material ). Entendi com esta resposta: stackoverflow.com/a/56753953/900394Eu escrevi uma classe que estende o EditText que suporta nativamente alguns métodos de validação e é realmente muito flexível.
Atualmente, como eu escrevo, nativamente suportados por métodos de validação de atributos xml são:
Você pode conferir aqui
Espero que goste :)
fonte
Acho InputFilter ser mais apropriado para validar entradas de texto no android.
Aqui está um exemplo simples: como uso o InputFilter para limitar caracteres em um EditText no Android?
Você pode adicionar um brinde ao feedback do usuário sobre suas restrições. Verifique também a etiqueta android: inputType.
fonte
Eu precisava fazer a validação dentro do campo e não a validação entre campos para testar se meus valores eram valores de ponto flutuante sem sinal em um caso e valores de ponto flutuante assinados em outro. Aqui está o que parece funcionar para mim:
Observe que você não deve ter espaços dentro de "numberSigned | numberDecimal". Por exemplo: "numberSigned | numberDecimal" não funcionará. Não sei por que.
fonte
Isso parece realmente promissor e exatamente o que o documento solicitou para mim:
Validador EditText
validadores personalizados mais estes incorporados:
fonte
No arquivo main.xml
Você pode colocar o seguinte atributo para validar apenas caracteres alfabéticos podem aceitar no edittext.
Faça isso :
fonte
Você pode obter o comportamento desejado ouvindo quando o usuário pressiona o botão "Concluído" no teclado. Confira também outras dicas sobre como trabalhar com o EditText no meu post "Validação de formulário do Android - o caminho certo"
Código de amostra:
fonte
para validação de e-mail e senha, tente
fonte
Eu criei esta biblioteca para o Android, onde você pode validar um EditText de design de material dentro e EditTextLayout facilmente assim:
então você pode usá-lo assim:
Então você pode verificar se é válido assim:
Para obter mais exemplos e personalização, verifique o repositório https://github.com/TeleClinic/SmartEditText
fonte