Solución:
Debería usar InputFilter aquí hay un ejemplo
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\.)?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Matcher matcher=mPattern.matcher(dest);
if(!matcher.matches())
return "";
return null;
}
}
puedes usarlo así
editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});
Solución de Kotlin usando la extensión para EditText:
Cree la siguiente función de limitador decimal EditText, que contiene un TextWatcher que buscará cambios de texto, como verificar el número de dígitos decimales y si el usuario ingresa solo ‘.’ símbolo, entonces tendrá el prefijo 0.
fun EditText.addDecimalLimiter(maxLimit: Int = 2) {
this.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val str = [email protected]!!.toString()
if (str.isEmpty()) return
val str2 = decimalLimiter(str, maxLimit)
if (str2 != str) {
[email protected](str2)
val pos = [email protected]!!.length
[email protected](pos)
}
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
})
}
fun EditText.decimalLimiter(string: String, MAX_DECIMAL: Int): String {
var str = string
if (str[0] == '.') str = "0$str"
val max = str.length
var rFinal = ""
var after = false
var i = 0
var up = 0
var decimal = 0
var t: Char
val decimalCount = str.count{ ".".contains(it) }
if (decimalCount > 1)
return str.dropLast(1)
while (i < max) {
t = str[i]
if (t != '.' && !after) {
up++
} else if (t == '.') {
after = true
} else {
decimal++
if (decimal > MAX_DECIMAL)
return rFinal
}
rFinal += t
i++
}
return rFinal
}
Puede usarlo de la siguiente manera:
val decimalText: EditText = findViewById(R.id.your_edit_text_id)
decimalText.addDecimalLimiter() // This will by default set the editText with 2 digit decimal
decimalText.addDecimalLimiter(3) // 3 or any number of decimals based on your requirements
Pasos adicionales:
También establece tipo de entrada como numberDecimal
en su archivo de diseño, que mostrará solo el teclado numérico
<EditText
android:inputType="numberDecimal" />
O
Puede establecer inputType programáticamente de la siguiente manera:
decimalText.inputType = InputType.TYPE_CLASS_NUMBER
Tomé la ayuda de esta publicación.
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 4)