Définir les chiffres EditText par programme

86

J'essaie essentiellement de définir la valeur des chiffres d'un EditText par programme. Jusqu'à présent, j'ai:

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

Ce qui est bien, mais je veux aussi pouvoir inclure une décimale (.). Des idées?

ryandlf
la source
1
Vous préféreriez probablement utiliser à la DialerKeyListenerplace deDigitsKeyListener
Dmitry Gryazin

Réponses:

206

Essaye ça:

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

À partir du code:

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

Mais, il permet à l'utilisateur d'inclure plusieurs "." Voir la réponse de JoeyRA pour les nombres réels.

Whiler
la source
C'est bien, mais je veux le faire par programme. La raison en est que je souhaite réutiliser une mise en page dans plusieurs situations, car ces chiffres sont la seule variable qui change constamment. Le faire dans le code est beaucoup plus efficace dans ma situation.
ryandlf le
2
Merci. Je pense en fait que cette réponse mérite d'être cochée car elle est spécifique à ce que j'ai demandé, mais les deux solutions fonctionnent.
ryandlf
@feresr, c'est étrange, car en regardant les TextViewsources: // 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
À quoi sert .après 9?
Mitesh Shah
1
@MiteshShah il permet la décimale.
masterwok le
30

Essaye ça:

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) 

Renvoie un DigitsKeyListener qui accepte les chiffres de 0 à 9, plus le signe moins (uniquement au début) et / ou le point décimal (un seul par champ) si spécifié.

Cela résout le problème du plus grand nombre ». dans EditText

JoeyRA
la source
1
Ajoutez simplement une clarification: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); pour activer les nombres décimaux et négatifs. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); pour activer uniquement les nombres décimaux positifs. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); pour n'activer que des entiers positifs.
SerSánGal
8
Question: si vous setInputTypeune fois de plus, cela ne remplacera-t-il pas le second par le premier? Je pense que vous devriez utiliser weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);mais je ne suis pas sûr à 100%
Rafael Ruiz Muñoz
20

Utilisez InputType.TYPE_NUMBER_FLAG_DECIMAL.

Voir également: Types d'entrée .

Ricky
la source
-1? Je n'ai sûrement pas fait ça. Votre solution a fonctionné, merci.
ryandlf
Il semble qu'il a été inversé. Heureux de vous aider.
Ricky
4

Pour l'entrée d'adresse IP (plusieurs points et nombres)

essayer

<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
la source
1
Veuillez noter que les adresses IP hexadécimales (avec des parties commençant par 0x) sont également valides et que le nom de domaine peut être utilisé à la place de l'adresse IP.
Triang3l