Spanish [Solucionado] ¿ Como formateo un EDITEXT numerico ?

Sergio Castellari

Active Member
Licensed User
Situación:
1) Necesito formatear un EDITEXT con una mascara numerica tipo "999999.99"
Es decir necesito validar un ingreso numerico con dos decimales.
2) Poder cambiar el color del numero si es positivo o negativo mientras se escribe
Saludos
 

Gabino A. de la Gala

Active Member
Licensed User
Situación:
1) Necesito formatear un EDITEXT con una mascara numerica tipo "999999.99"
Es decir necesito validar un ingreso numerico con dos decimales.
2) Poder cambiar el color del numero si es positivo o negativo mientras se escribe
Saludos

Quizás te sirva de punto de partida esto:


Los edit tienen un evento que creo que es lo que necesitas para poder cambiar el color sobre la marcha:
B4X:
Private Sub EditText1_TextChanged (Old As String, New As String)
	
End Sub
 

Sergio Castellari

Active Member
Licensed User
Hola @Gabino A. de la Gala !!!

Voy a tener que estudiar B4XFormatter porque NI IDEA!!
Tampoco sabia del Evento "TextChanged"

Un colega del foro en ingles me paso la solucion
Aqui la comparto:
B4X:
'*** Se ejecunta durante los cambios de "edtImporte" ***
Private Sub edtImporte_TextChanged (Old As String, New As String)
    'Nota: En el diseñador, configuro EditText1 para esperar una entrada DECIMAL.
        'En los teclados numéricos, el signo menos requiere dos clics en mi dispositivo Samsung
    If New = "-" Then edtImporte.TextColor = xui.Color_Red
    Dim k As  Int = New.IndexOf(".")
    If k > -1 Then
        If New.Length - k > 3 Then
            edtImporte.Text = Old
            edtImporte.SelectionStart = Old.length
        End If
    End If
End Sub

Y luego de presionar un boton de "aceptar" la carga, coloco el siguiente codigo para "restablecer" el color de origen:
B4X:
edtImporte.Text = ""
edtImporte.TextColor = xui.Color_White
Quedó funcionando joya!...(aunque todavia nosé que carajo hace New.IndexOf("."), ni de donde comparar -1 y 3 luego...

NOTA: Estoy en el subsuelo de conocer B4X...pero seguiré intentando!
Saludos,
 

Gabino A. de la Gala

Active Member
Licensed User
Hola @Gabino A. de la Gala !!!

Voy a tener que estudiar B4XFormatter porque NI IDEA!!
Tampoco sabia del Evento "TextChanged"

Un colega del foro en ingles me paso la solucion
Aqui la comparto:
B4X:
'*** Se ejecunta durante los cambios de "edtImporte" ***
Private Sub edtImporte_TextChanged (Old As String, New As String)
    'Nota: En el diseñador, configuro EditText1 para esperar una entrada DECIMAL.
        'En los teclados numéricos, el signo menos requiere dos clics en mi dispositivo Samsung
    If New = "-" Then edtImporte.TextColor = xui.Color_Red
    Dim k As  Int = New.IndexOf(".")
    If k > -1 Then
        If New.Length - k > 3 Then
            edtImporte.Text = Old
            edtImporte.SelectionStart = Old.length
        End If
    End If
End Sub

Y luego de presionar un boton de "aceptar" la carga, coloco el siguiente codigo para "restablecer" el color de origen:
B4X:
edtImporte.Text = ""
edtImporte.TextColor = xui.Color_White
Quedó funcionando joya!...(aunque todavia nosé que carajo hace New.IndexOf("."), ni de donde comparar -1 y 3 luego...

NOTA: Estoy en el subsuelo de conocer B4X...pero seguiré intentando!
Saludos,

El también está utilizando el evento TextChanged.
Con indexof pregunta por la posición del ".". si es -1 es que no encontró un "." en la cadena.
Por lo de preguntar por New="-", creo que sólo se pondrá en rojo si lo primero que se mete es el "-", sino, no se si funcionará realmente.
 

Sergio Castellari

Active Member
Licensed User
ahah...entonces lo de "-1" indicaría NO encontrado, y en caso de encontrarlo, toma su posicion para luego mostrar solo 2 decimales, restando a la longitud total de la cadena, la posicion del punto, y si es mas de 3 (incluido el punto), simplemente dejo lo anterior escrito!
Si deseara mostrar 3 decimales, deberia ser un 4 (por que debe incluir el punto) [FUNCIONA!]

Wow! imposible que me diera cuenta de esto! ja
Abrazos!!
 

Sergio Castellari

Active Member
Licensed User
Interesante José, en este caso utiliza el codigo para "agregar" el punto separador de millares.
Esta muy bueno...pero con lo que pasé ya resuelvo el tema!
 
Top