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?


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.


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


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 .


-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" />

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.