Qual é a melhor maneira de limitar o tamanho do texto de um EditText
no Android?
Existe uma maneira de fazer isso via xml?
android
android-edittext
maxlength
hpique
fonte
fonte
Respostas:
Documentação
Exemplo
fonte
maxLength
propriedade ainda funciona.android:maxLength
é equivalente aInputFilter.LengthFilter
, portanto, ao alterar programaticamente o filtro, você também modificou o filtro XML.setFilters
deixará deandroid:maxLength
funcionar, porque substitui o filtro definido pelo XML. Em outras palavras, se você definir qualquer filtro programaticamente, deverá defini-los todos programaticamente.use um filtro de entrada para limitar o comprimento máximo de uma exibição de texto.
fonte
InputFilter
. Ele substituiandroid:maxlength
no arquivo xml, por isso precisamos adicionarLengthFilter
dessa maneira.fonte
TextWatcher
.Uma observação para as pessoas que já estão usando um filtro de entrada personalizado e também desejam limitar o comprimento máximo:
Quando você atribui filtros de entrada no código, todos os filtros de entrada definidos anteriormente são limpos, incluindo um conjunto com
android:maxLength
. Descobri isso ao tentar usar um filtro de entrada personalizado para impedir o uso de alguns caracteres que não permitimos em um campo de senha. Depois de definir esse filtro com setFilters, o maxLength não era mais observado. A solução foi definir maxLength e meu filtro personalizado juntos por meio de programação. Algo assim:fonte
fonte
Eu tive esse problema e considero que estamos perdendo uma maneira bem explicada de fazer isso programaticamente sem perder os filtros já configurados.
Definindo o comprimento em XML:
Como a resposta aceita afirma corretamente, se você deseja definir um comprimento fixo para um EditText que não será alterado mais no futuro, basta definir no XML do EditText:
Definir o comprimento programaticamente
Para definir o comprimento programaticamente, você precisará defini-lo através de um
InputFilter
. Mas se você criar um novo InputFilter e configurá-lo comoEditText
, perderá todos os outros filtros já definidos (por exemplo, maxLines, inputType, etc) que você pode ter adicionado por meio de XML ou programaticamente.Então, isso está errado :
Para evitar a perda de filtros adicionados anteriormente, você precisa obtê-los, adicione o novo (maxLength nesse caso) e defina os filtros novamente da
EditText
seguinte maneira:Java
No entanto, o Kotlin tornou mais fácil para todos, você também precisa adicionar o filtro aos já existentes, mas pode conseguir isso com um simples:
fonte
Para qualquer um que esteja se perguntando como conseguir isso, aqui está a minha
EditText
aula estendidaEditTextNumeric
..setMaxLength(int)
- define o número máximo de dígitos.setMaxValue(int)
- limite o valor inteiro máximo.setMin(int)
- limite do valor inteiro mínimo.getValue()
- obtém valor inteiroExemplo de uso:
Todos os outros métodos e atributos que se aplicam a
EditText
, é claro, também funcionam.fonte
Devido à observação do goto10, montei o seguinte código para proteger contra perda de outros filtros ao definir o comprimento máximo:
fonte
fonte
Xml
Java:
Kotlin:
fonte
Outra maneira de conseguir isso é adicionando a seguinte definição ao arquivo XML:
Isso limitará o comprimento máximo do
EditText
widget a 6 caracteres.fonte
No material.io , você pode usar
TextInputEditText
combinado comTextInputLayout
:Você pode configurar uma senha EditText com drawable:
Ou você pode limitar o tamanho do texto com / sem um contador:
Dependência:
fonte
XML
android:maxLength="10"
Programaticamente:
Nota: internamente, EditText e TextView analisam o valor
android:maxLength
em XML e usamInputFilter.LengthFilter()
para aplicá-lo.Consulte: TextView.java # L1564
fonte
Essa é uma classe EditText personalizada que permite que o filtro Comprimento seja exibido junto com outros filtros. Obrigado à resposta de Tim Gallagher (abaixo)
fonte
maneira simples em xml:
se você precisar definir 4 caracteres em xml edit-text, use este
fonte
Isso funciona bem ...
android:maxLength="10"
isso aceitará apenas
10
caracteres.fonte
Tente isso para Java programaticamente :
fonte
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
Eu já tinha visto muitas soluções boas, mas gostaria de dar uma solução mais completa e fácil de usar, que inclui:
1, limite de comprimento.
2, Se inserir mais, dê um retorno de chamada para acionar sua torrada.
3, o cursor pode estar no meio ou na cauda.
4, o usuário pode inserir colando uma string.
5, sempre descarte a entrada de excesso e mantenha a origem.
O que falhei em fazer é, se o usuário destacar uma parte da entrada atual e tentar colar uma sequência muito longa, não sei como restaurar o destaque.
Como comprimento máximo definido como 10, o usuário inseriu '12345678' e marque '345' como destaque e tente colar uma sequência de '0000' que excederá a limitação.
Quando tento usar edit_text.setSelection (start = 2, end = 4) para restaurar o status de origem, o resultado é: basta inserir 2 espaços como '12 345 678 ', não o destaque da origem. Eu gostaria que alguém resolvesse isso.
fonte
Você pode usar
android:maxLength="10"
o EditText (aqui o limite é de até 10 caracteres)fonte
Kotlin:
ZTE Blade A520
tem efeito estranho. Quando você digita mais de 10 símbolos (por exemplo, 15),EditText
mostra os 10 primeiros, mas os outros 5 não são visíveis nem acessíveis. Mas quando você exclui símbolos comBackspace
, ele primeiro exclui os 5 símbolos corretos e remove os 10 restantes. Para superar esse comportamento, use uma solução :ou isto:
ou isso, se você quiser sugestões:
fonte
maneira simples em xml:
para defini-lo programaticamente, você pode usar a seguinte função
fonte