Hola a todos.
He realizado un módulo clase estándar para introducir los datos, con un DialogsInput y customdialog de Better.
Me funciona de lujo primera especial. PERO el ScrollView2D de customdialog No consigo que se desplaze.
¿Alguien sabe donde estoy metiendo la pata?
Este es el código del módulo clase estándar.
Y accedo desde varios módulos de actividad así.
Gracias.
He realizado un módulo clase estándar para introducir los datos, con un DialogsInput y customdialog de Better.
Me funciona de lujo primera especial. PERO el ScrollView2D de customdialog No consigo que se desplaze.
¿Alguien sabe donde estoy metiendo la pata?
Este es el código del módulo clase estándar.
B4X:
Sub Class_Globals
'__________BetterDialogsInput
Private BetterDialogs1 As BetterDialogs 'Trabajos con Dialogos (Libreria BetterDialogs )
Private IP As BD_InputBoxParams 'Trabajos con Dialogos (Libreria BetterDialogs )
Dim MyCursorPantallas As Cursor
Dim DR As Int
Dim IP1 As String
'__________BetterDialogsRadioButton
Private SVCheckBox As ScrollView2D 'Trabajos con ScrollView
Dim GD As GradientDrawable
Dim RadioBotonRespuestaTexto, RadioBotonRespuestaPosicion As String
Dim EsUnico As Boolean
End Sub
Public Sub Initialize(MySQL As String)
MyCursorPantallas=Main.MySQLMain.ExecQuery(MySQL)
End Sub
'++++++++++++++++++++ BetterDialogsInput ++++++++++++++++++++++++++++++++++++++++ BetterDialogsInput ++++++++++++++++++++
Public Sub Input(Posicion As Int,Texto As String)
MyCursorPantallas.Position = Posicion
IP.Initialize
IP.Default = Texto 'Texto
IP.HintColor = Colors.Red 'Color de la Insinuación
IP.InputTextSize = Modulo1.IntToDIP(30) 'Tamaño de letra del Input
IP.Gravity = Gravity.CENTER_VERTICAL + Gravity.CENTER_HORIZONTAL 'Horientacion
IP.Multiline = False 'Multiples lineas
IP.QuestionTextSize = Modulo1.IntToDIP(30) 'Tamaño de letra de la Pregunta
IP.SpaceBetween = 4dip 'Espacio entre la Pregunta y el Input.
IP.ValidationCallback = "Input_Validation" 'Validar datos
IP.WithSuggestions =True 'Teclado con Sugerencias
IP.Format = MyCursorPantallas.GetString ("Format") 'Formato
IP.Hint = MyCursorPantallas.GetString ("Hint") 'Insinuación
IP.Question = MyCursorPantallas.GetString ("Question") 'Pregunta
Select MyCursorPantallas.GetString ("Teclado") 'Tipo de teclado
Case 1 'Numeros con decimales
IP.InputType = IP.INPUT_TYPE_DECIMAL_NUMBERS
Case 2 'Numeros
IP.InputType = IP.INPUT_TYPE_NUMBERS
Case 3 'Numeros con signos
IP.InputType = IP.INPUT_TYPE_NUMBERS_WITH_SIGN
Case 4 'Telefono
IP.InputType = IP.INPUT_TYPE_PHONE
Case 5 'Texto
IP.InputType = IP.INPUT_TYPE_TEXT
Case 6 'Texto con 1º letra mayuscula
IP.InputType = IP.INPUT_TYPE_TEXT_WITH_CAPS
End Select
If MyCursorPantallas.GetString ("Necesario") = "True" And IP.Default = "" Then
DR = BetterDialogs1.InputBox(MyCursorPantallas.GetString ("Nombre") & " " & Main.TituloAdicionalImput, IP, "Ok", "", "", "")
Else
DR = BetterDialogs1.InputBox(MyCursorPantallas.GetString ("Nombre") & " " & Main.TituloAdicionalImput, IP, "Ok", "Cancelar", "", "")
End If
If DR = DialogResponse.POSITIVE Then
IP1 = IP.CompactAnswer.Replace("'","´")
Else
IP1 = Texto
End If
'Me da mucha rabia que el teclado se quede visible, por eso confirmo que se cierra.
Dim TecladoSoft As IME
TecladoSoft.Initialize("")
TecladoSoft.HideKeyboard
End Sub
'__________Valida el BetterDialogs
Sub Input_Validation(Answer As String, CompactAnswer As String) As String
If CompactAnswer.Length>MyCursorPantallas.GetString ("Caracteres") Then
Modulo1.Sonido_Error
Return CompactAnswer.Length & " Carácteres." & CRLF & "Maximo " & MyCursorPantallas.GetString ("Caracteres") & " carácteres"
Else If CompactAnswer = "" And MyCursorPantallas.GetString ("Necesario")= "True" Then
Modulo1.Sonido_Error
Return "No puede estar vacio"
Else
Return ""
End If
End Sub
'++++++++++++++++++++ BetterDialogsRadioButton ++++++++++++++++++++++++++++++++++++++++ BetterDialogsRadioButton ++++++++++++++++++++
Public Sub CheckBox(L As List, Selecciones As String, Mensage As String)
If Selecciones = "-1" Then EsUnico = True Else EsUnico = False
'Dimensiona los controles
Private PnlCheckBox As Panel
GD.Initialize("TL_BR",Array As Int(Colors.DarkGray,Colors.Black))
PnlCheckBox.Initialize("PnlCheckBox")
PnlCheckBox.Height = 100%y
PnlCheckBox.Width = 100%x
'Dimensiona las posiciones
Dim Izquierda As Int = 0 'Left
Dim Arriba As Int = PnlCheckBox.Height /16 'Top
Dim Ancho As Int = PnlCheckBox.Width/8 'Width
Dim Alto As Int = PnlCheckBox.Height /16 'Height
'Crea el boton Ok
Dim btnOK As Button
btnOK.Initialize("")
btnOK.Background = GD
btnOK.Text = "<Font Color='Yellow'>O</Font>K"
btnOK.TextColor = Colors.White
'Crea el PnlRadioButton
If L.Size>9 Then
PnlCheckBox.Height=Alto*9
Else
PnlCheckBox.Height=Alto*L.Size
End If
PnlCheckBox.Width = Ancho*6
PnlCheckBox.Background=GD
'Crea los RadioButton
SVCheckBox.Initialize(PnlCheckBox.Width,L.Size * Alto,"SVCheckbox")
PnlCheckBox.AddView(SVCheckBox,0%x,0%y,100%x,100%y)
SVCheckBox.FadingEdges(True)
Dim CheckBoxSeries(L.Size) As CheckBox
Arriba = 0
Dim Cambiar As Int = 0
For i=0 To L.Size-1
Dim CheckBox1 As CheckBox
CheckBox1.Initialize("CheckBox1")
CheckBox1.Text = " " & L.Get(i)
CheckBox1.TextSize = Modulo1.IntToDIP(30)
CheckBox1.Tag = i
CheckBox1.TextColor = Colors.White
CheckBox1.Checked = False
If EsUnico = False Then
If Selecciones.IndexOf(i)<>-1 Then CheckBox1.Checked = True
End If
If Cambiar = 0 Then CheckBox1.Color=Colors.ARGB(50,0,0,0) Else CheckBox1.Color=Colors.ARGB(100,0,0,0)
CheckBoxSeries(i)=CheckBox1
SVCheckBox.Panel.AddView(CheckBox1,Izquierda,Arriba,PnlCheckBox.Width*2,Alto)
Arriba = Arriba + Alto
Cambiar = 1 - Cambiar
Next
'Crea los CustomDlgParams
Dim dlgParams As BD_CustomDlgParams
dlgParams.Initialize
dlgParams.Title = Mensage
dlgParams.Background = Colors.Transparent
dlgParams.DialogGravity = Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
dlgParams.MarginHeight = 1%x
dlgParams.DialogBody = PnlCheckBox
dlgParams.BodyWidth = PnlCheckBox.Width
dlgParams.BodyHeight = PnlCheckBox.Height
If EsUnico = False Then dlgParams.PositiveButton = btnOK
DR = BetterDialogs1.CustomDialog(dlgParams, "CheckBox")
'Rellena las respuestas
RadioBotonRespuestaTexto = ""
RadioBotonRespuestaPosicion = ""
For i=0 To L.Size-1
If CheckBoxSeries(i).Checked = True Then
If RadioBotonRespuestaTexto = "" Then
RadioBotonRespuestaTexto = CheckBoxSeries(i).Text.Trim
RadioBotonRespuestaPosicion = CheckBoxSeries(i).Tag
Else
RadioBotonRespuestaTexto = RadioBotonRespuestaTexto & ":" & CheckBoxSeries(i).Text.Trim
RadioBotonRespuestaPosicion = RadioBotonRespuestaPosicion & ":" & CheckBoxSeries(i).Tag
End If
End If
Next
End Sub
'__________Controla la tecla ATRÁS
Sub CheckBox_BackKeyPressed As Boolean
Modulo1.Sonido_Error
Return True 'Previene la cancelación del diálogo.
End Sub
Sub CheckBox_Closing(DlgResponse As Int) As Boolean
Return True 'Falso cancelaría el cierre.
End Sub
Sub CheckBox1_CheckedChange(Checked As Boolean)
'Dim RB As CheckBox = Sender
If EsUnico = True Then
BetterDialogs1.CloseDialog(DialogResponse.POSITIVE)
End If
End Sub
Y accedo desde varios módulos de actividad así.
B4X:
Lista.Initialize2(Array("XXL","XL","L","M","S","RTS.","SUC."))
inputClase1.CheckBox(Lista,Crianza,"Seleccione una familia")
LblSeries(Lbl1.Tag).Text = inputClase1.RadioBotonRespuestaTexto