Le inputType
numberDecimal
in EditText
utilise le point '.' comme séparateur décimal. En Europe, il est courant d'utiliser une virgule «,» à la place. Même si mes paramètres régionaux sont définis en allemand, le séparateur décimal est toujours le '.'
Existe-t-il un moyen d'obtenir la virgule comme séparateur décimal?
Réponses:
Une solution de contournement (jusqu'à ce que Google corrige ce bogue) consiste à utiliser un
EditText
avecandroid:inputType="numberDecimal"
etandroid:digits="0123456789.,"
.Ajoutez ensuite un TextChangedListener à EditText avec le afterTextChanged suivant:
la source
Une variation sur les solutions 'digit' proposées ici:
Prise en compte du séparateur de paramètres régionaux.
la source
,
dans son clavier. Exemples: clavier Samsung (KitKat).Masque de devise de code suivant pour EditText (123 125,155 $)
Mise en page XML
Code
la source
Il s'agit d'un bogue connu dans le SDK Android. La seule solution de contournement consiste à créer votre propre clavier virtuel. Vous pouvez trouver un exemple d'implémentation ici .
la source
La réponse Martins ne fonctionnera pas si vous instanciez le EditText par programme. Je suis allé de l'avant et j'ai modifié la
DigitsKeyListener
classe incluse de l'API 14 pour permettre à la fois la virgule et le point comme séparateur décimal.Pour l'utiliser, appelez
setKeyListener()
leEditText
, par exempleCependant, vous devez toujours utiliser l'astuce de Martin dans le
TextChangedListener
cas où vous remplacez les virgules par des pointsla source
vous pouvez utiliser ce qui suit pour différents paramètres régionaux
la source
Vous pouvez utiliser la solution de contournement suivante pour inclure également la virgule comme entrée valide: -
Via XML:
Par programme:
De cette façon, le système Android affichera le clavier des chiffres et autorisera la saisie d'une virgule. J'espère que cela répond à la question :)
la source
Pour les solutions Mono (Droid):
la source
Vous pouvez faire ce qui suit:
Et puis vous pouvez utiliser un filtre d'entrée:
}
la source
À mon humble avis, la meilleure approche pour ce problème consiste simplement à utiliser InputFilter. Un bon point essentiel est ici DecimalDigitsInputFilter . Ensuite, vous pouvez simplement:
la source
pour localiser votre entrée, utilisez:
puis ajoutez:
alors n'oubliez pas de remplacer "," par "." donc Float ou Double peuvent l'analyser sans erreur.
la source
Tous les autres articles ici présentaient des lacunes majeures, voici donc une solution qui:
Dans le XML:
Variable de classe:
Dans onCreate, recherchez le séparateur utilisé dans la locale actuelle:
Aussi onCreate, utilisez ceci pour le mettre à jour si vous chargez dans une valeur actuelle:
Aussi surCréer, ajouter les auditeurs
editTextWatcher
Exemple de doSomething (), conversion en période standard pour la manipulation de données
la source
Android a un formateur de nombres intégré.
Vous pouvez l'ajouter à votre
EditText
pour autoriser les décimales et les virgules:android:inputType="numberDecimal"
etandroid:digits="0123456789.,"
Puis quelque part dans votre code, soit lorsque l'utilisateur clique sur Enregistrer, soit après la saisie du texte (utilisez un écouteur).
la source
J'ai décidé de changer la virgule en point uniquement lors de l'édition. Voici ma solution de contournement délicate et relativement simple:
someDecimalFormatter utilisera une virgule ou un point selon les paramètres régionaux
la source
Je ne sais pas pourquoi vos réponses sont si compliquées. S'il y a un bogue dans le SDK, vous devez le remplacer ou le contourner.
J'ai choisi la deuxième façon de résoudre ce problème. Si vous formatez votre chaîne en tant que
Locale.ENGLISH
, puis placez-la dansEditText
(même sous forme de chaîne vide). Exemple:String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
En poursuivant cette solution, vos résultats sont compatibles avec le clavier illustré. Ensuite, les nombres flottants et doubles fonctionnent de manière typique pour les langages de programmation avec un point au lieu de la virgule.
la source
Ma solution est:
Dans l'activité principale:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
Dans un fichier xml:
android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"
et j'ai pris le double dans le editText comme une chaîne.
la source
Je peux confirmer que les correctifs proposés ne fonctionnent pas sur les IME de Samsung (du moins sur S6 et S9) et peut-être sur LG. Ils affichent toujours un point comme séparateur décimal quelle que soit la localisation. Le passage à l'IME de Google corrige ce problème, mais ce n'est guère une option pour la plupart des développeurs.
Cela n'a pas non plus été corrigé dans Oreo pour ces claviers, car c'est un correctif que Samsung et / ou LG doivent faire et ensuite pousser même sur leurs anciens combinés.
J'ai plutôt forké le projet de clavier numérique et ajouté un mode où il se comporte comme un IME: fork . Consultez l'exemple de projet pour plus de détails. Cela a très bien fonctionné pour moi et est similaire à la plupart des faux IME «saisie de code PIN» que vous voyez dans les applications bancaires.
la source
Cela fait plus de 8 ans et je suis surpris, ce problème n'est pas encore résolu ...
J'ai eu du mal avec ce problème simple car la réponse la plus votée de @Martin permet de taper plusieurs séparateurs, c'est-à-dire que l'utilisateur peut taper "12 ,,, ,,, 12,1,, 21,2, "
De plus, le deuxième problème est que sur certains appareils, la virgule n'est pas affichée sur le clavier numérique (ou nécessite une pression multiple sur un bouton à point)
Voici ma solution de contournement, qui résout les problèmes mentionnés et permet à l'utilisateur de taper '.' et ',', mais dans EditText, il verra le seul séparateur décimal qui correspond à la locale actuelle:
Et l'observateur de texte:
la source
Solution simple, faites un contrôle personnalisé. (ceci est fait dans Xamarin android mais devrait être porté facilement vers java)
la source
Vous pouvez utiliser
inputType="phone"
, mais dans ce cas, vous devrez gérer plusieurs,
ou.
être présent, une validation supplémentaire serait donc nécessaire.la source
Je pense que cette solution est moins complexe que les autres écrites ici:
De cette façon, lorsque vous appuyez sur le '.' dans le clavier virtuel, rien ne se passe; seuls les chiffres et les virgules sont autorisés.
la source