Definir dígitos EditText programaticamente

86

Estou essencialmente tentando definir o valor de dígitos de um EditText programaticamente. Até agora eu tenho:

weightInput.setInputType(InputType.TYPE_CLASS_PHONE);
weightInput.setKeyListener(DigitsKeyListener.getInstance());

O que é bom, mas também quero incluir uma casa decimal (.). Alguma ideia?

Ryandlf
fonte
1
Você provavelmente preferiria usar em DialerKeyListenervez deDigitsKeyListener
Dmitry Gryazin

Respostas:

206

Experimente isto:

<EditText
    android:inputType="number"
    android:digits="0123456789."
/>

Do Código:

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

Mas, permite ao usuário incluir vários "." Veja a resposta de JoeyRA para números reais.

Whiler
fonte
Tudo bem, mas quero fazer isso programaticamente. A razão para isso é porque eu quero reutilizar um layout em várias situações, pois esses dígitos são a única variável que muda constantemente. Fazer isso em código é muito mais eficaz na minha situação.
Ryandlf
2
Obrigado. Na verdade, acho que essa resposta merece a marca de seleção porque é específica para o que eu pedi, mas ambas as soluções funcionam.
Ryandlf
@feresr, isso é estranho, porque olhando as TextViewfontes: // If no input type was specified, we will default to generic text, since we can't tell the IME about the set of digits that was selected.
Dmitry Gryazin
Qual é a utilidade de .após 9?
Mitesh Shah
1
@MiteshShah permite casas decimais.
masterwok
30

Experimente isto:

weightInput.setInputType(InputType.TYPE_CLASS_NUMBER);          
weightInput.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);           
weightInput.setKeyListener(DigitsKeyListener.getInstance(false,true));

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

Retorna um DigitsKeyListener que aceita os dígitos de 0 a 9, mais o sinal de menos (apenas no início) e / ou ponto decimal (apenas um por campo) se especificado.

Isso resolve o problema dos muitos '.' em EditText

JoeyRA
fonte
1
Basta adicionar um esclarecimento: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); para habilitar números decimais e negativos. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); para ativar apenas números decimais positivos. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); para habilitar apenas números inteiros positivos.
SerSánGal
8
Pergunta: se você setInputTypeuma e outra vez, isso não substituirá o segundo pelo primeiro? Acho que você deveria usar, weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);mas não tenho 100% de certeza
Rafael Ruiz Muñoz,
20

Use InputType.TYPE_NUMBER_FLAG_DECIMAL.

Veja também: Tipos de entrada .

Ricky
fonte
-1? Certamente não fiz isso. Sua solução funcionou, obrigado.
Ryandlf
Parece que foi revertido. Feliz em ajudar.
Ricky,
4

Para entrada de endereço IP (vários pontos e números)

tentar

<EditText
    android:id="@+id/ipBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/ipAddrHint"
    android:inputType="numberDecimal|number"
    android:digits="0123456789."
    android:textSize="30sp" />
NAGESH MH
fonte
1
Observe que os endereços IP hexadecimais (com partes começando com 0x) também são válidos e o nome de domínio pode ser usado em vez do endereço IP.
Triang3l