como definir apenas o valor numérico para edittext no android?

209

Eu tenho um edittextem que eu quero apenas valores inteiros a serem inseridos. Alguém pode me dizer qual propriedade devo usar?

Sourabh
fonte

Respostas:

403

Eu acho que android:inputType="number"nos atributos XML.

Utyi
fonte
11
Cara, eu adoro o Android dev ... tanto barulho por ter essa opção nas páginas da web!
22412 Alex
14
Olá, no Android 2.3.3, é "numberSigned". Apenas escrevi isso aqui, no caso de alguém está procurando por ele :)
Suco de limão
E se meu editText aparecer na caixa de diálogo e, assim, eu apenas o declarar em código .java? ou seja, a caixa de diálogo editText não aparece no arquivo XML. Como ainda posso conseguir isso?
Sibbs Gambling
1
Além disso, você pode usar android:inputType="phone"no lugar disso. Mas parece um pouco mais "ocupado".
precisa
126

Por exemplo:

<EditText
android:id="@+id/myNumber"
android:digits="0123456789."
android:inputType="numberDecimal"
/>
Barmaley Red Star
fonte
3
Essa é a melhor solução !
RRTW
2
Estou assumindo o texto deverá ler 0123456789.e não0123456780.
audiFanatic
Isso funciona com o android: inputType = "number" também! Eu precisava disso para impedir que os usuários digitassem operadores, parênteses etc. no teclado numérico. Que salva-vidas, cara! Bem-vindo ao Costco; Eu te amo!
gonzobrains
2
Isso não vai permitir que você coloque os números negativos e, ao mesmo tempo que permitirá decimais duplicados. (Ex: 1.1.1 .....)
Rushi Ayyappa
Bom, adicionando android: digits também lida com o caso de copiar e colar.
StoneLam
107

No código, você poderia fazer

ed_ins.setInputType(InputType.TYPE_CLASS_NUMBER);
Sourabh
fonte
@MohamedKhamis é o nome do
EditText
1
Sourabh pediu "Somente valores inteiros sejam inseridos". Isso permite inserir muito mais.
Zon
30

Para inserir apenas dígitos, use android:inputType="numberPassword"junto com editText.setTransformationMethod(null);para remover a ocultação automática do número.

OU

android:inputType="phone"

Para entrada apenas de dígitos, acho que essas duas maneiras são melhores que android:inputType="number". A limitação de mencionar "número" como inputType é que o teclado permite alternar para caracteres e também permite que outros caracteres especiais sejam inseridos. "numberPassword" inputType não tem esses problemas, pois o teclado mostra apenas dígitos. Mesmo o tipo de entrada "telefone" funciona, pois o teclado não permite que você alterne para caracteres. Mas você ainda pode inserir dois caracteres especiais como +, /, N, etc.

android: inputType = "numberPassword" com editText.setTransformationMethod (null);

inputType = "numberPassword"

inputType = "telefone"

inputType = "telefone"

inputType = "number"

inputType = "number"

abhiank
fonte
1
Isto é perfeito! android:inputType="numberPassword"junto comeditText.setTransformationMethod(null);
coderpc
essa dica torna o meu aplicativo perfeito.
Kernelzero
6
android:inputType="numberDecimal"
Nafiz
fonte
5
Isso é ótimo, mas o sistema de números inteiros não inclui nenhum número decimal.
RileyE
@RileyE O que você quer dizer com isso? Começamos a usar isso para todas as nossas entradas numéricas e quero ter certeza de que não estamos perdendo algo. Obrigado!
Joshua Pinter
4
<EditText
android:id="@+id/age"
android:numeric="integer" 
/>
Sandeep V
fonte
3
android: numérico está obsoleto desde API 3, ver resposta à stackoverflow.com/questions/12625380/...
winne2
2

usando o abaixo pode resolver seu problema melhor;

em xml:

<EditText
      android:id="@+id/age"
      android:inputType="numberDecimal|numberSigned"        />

ou // em atividade dentro de etfield.addtextchangelistener

     private String blockCharacterSet="+(/)N,*;#";//declare globally
               try {
                for (int i = 0; i < s.length(); i++) {


                    if (blockCharacterSet.contains(s.charAt(i) + "")) {

                        String corrected_settempvalue = arrivalsettemp.substring(0, arrivalsettemp.length() - 1);
                        et_ArrivalSetTemp.setText(corrected_settempvalue);
                        if (corrected_settempvalue.length() != 0)
                            et_ArrivalSetTemp.setSelection(corrected_settempvalue.length());

                    }
                }
            } catch (Exception d) {
                d.printStackTrace();
            }
Rushi Ayyappa
fonte
2

Se alguém quiser usar apenas o número de 0 a 9 com a imeOptionsativação, use a linha abaixo no seuEditText

android: inputType = "número | nenhum"

Isso permitirá apenas o número e, se você clicar no botão Concluído / Próximo do teclado, seu foco será movido para o próximo campo.

Sandeep
fonte
0

Você pode usá-lo em XML

<EditText
 android:id="@+id/myNumber"
 android:digits="123"
 android:inputType="number"
/>

ou,

android:inputType="numberPassword" along with editText.setTransformationMethod(null); to remove auto-hiding of the number.

ou,

android:inputType="phone"

Programaticamente, você pode usar
editText.setInputType (InputType.TYPE_CLASS_NUMBER);

Rubela Shome
fonte
0

Preciso pegar pressionando Enter em um teclado com o TextWatcher . Mas eu descobri que todos os teclados numéricos do Android: inputType = "number" ou "numberDecimal" ou "numberPassword" etc não me permitem pegar Enter quando o usuário pressiona.

Eu tentei android:digits="0123456789\n"e todos os teclados numéricos começaram a funcionar com Enter e TextWatcher.

Então, meu caminho é:

android:digits="0123456789\n"
android:inputType="numberPassword"

mais editText.setTransformationMethod(null)

Graças a barmaley e abhiank.

Alexander Key
fonte
0

Não sei qual foi a resposta correta em 13, mas hoje é:

myEditText.setKeyListener(DigitsKeyListener.getInstance(null, false, true)); // positive decimal numbers

Você obtém tudo, inclusive o teclado na tela é um teclado numérico.

Quase tudo. O café expresso, em sua infinita sabedoria, permite typeText("...")inexplicavelmente ignorar o filtro e entrar no lixo ...

Phlip
fonte
-4

o mais simples para mim

android:numeric="integer" 

embora isso também personalize mais

android:digits="0123456789"
Henry Simon
fonte
android: numérico está obsoleto desde API 3, ver resposta à stackoverflow.com/questions/12625380/...
winne2