|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
   AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

B4A en español - Juan Antonio Villalpando
(BASIC4Android)

-- Tutorial de B4A --

Volver al índice del tutorial

____________________________

59B- Orientación. Tablet o móvil.

NOTA: Este tutorial se complementa con otro que vimos en: 15.- Panel con pestañas.

Como hemos visto en un tutorial anterior, cuando Android cambia de orientación horizontal / vertical, los controles se descolocan y las variables pierden su valor. Vamos a ver como podemos mantener los controles situados en los lugares adecuados y que las variables no pierdan su valor.

Para ello vamos a realizar el siguiente ejemplo:

___________________________________________________________
1.- Mantener controles y variables cuando cambia la orientación.

______________
- Designer.

Creamos un nuevo proyecto llamado orientacion.

Creamos los controles

 

 

Insertamos mediante
Designer / Add View

Label1           Text = Escribe tu nombre
EditText1
CheckBox1     Text = Pescado
CheckBox2     Text = Carne
CheckBox3     Text = Frutas
Button1          Text = Elige y Pulsa
Label2

 

Guardamos el Designer:
File / Save : Layout

Recuerda que para que el Designer muestre los controles en el emulador debemos de pulsar en...

Designer / Tools / Connect to Device / Emulator

______________
- Código.

Código del programa
' Juan Antonio
' juana1991@yahoo.com

Sub Process_Globals

End Sub

Sub Globals
    Dim comida As String
    Dim EditText1 As EditText
    Dim CheckBox1, CheckBox2, CheckBox3 As CheckBox
    Dim Label2 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("Layout")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
    comida = ""
    If CheckBox1.Checked = True Then comida = "pescado, "
    If CheckBox2.Checked = True Then comida = comida & "carne, "
    If CheckBox3.Checked = True Then comida = comida & "fruta. "
    comida =  EditText1.Text & ", has elegido: " & comida
    Label2.Text = comida
End Sub

- Compila y ejecuta la aplicación.

Pulsa la combinación de teclas Control F11 para se se ponga horizontal.

Verás que se han perdido algunos controles y que no se mantienen las variables ni los elementos elegidos.

Si vuelves a pulsar Control F11 se volverá a poner en vertical y comprobarás que las variables continúan sin los valores que pusistes.

______________________________________________________________

- Vamos a solucionar la ubicación de los controles.

Para ello vamos al Designer y observamos que nuestro Layout es de 320 x 480.

 

 

 

 

Vamos a crear otro Layout, para ello pulsamos en New Variant

 

 

 

 

y elegimos un Phone (landscape) 480 x 320

 

 

 

 

 

 

Marcamos 480 x 320

Pulsamos la combinación de teclas Control F11, para ponerlo horizontal y arrastramos el Botón y el Label2 hasta ponerlos visibles como indica el dibujo.

 

A partir de ahora cuando cambiemos la orientación horizontal o vertical de la pantalla, los controles se situarán según la manera elegida en cada caso.

- Ahora vamos a solucionar el problema de las variables, es decir que cuando cambia la orientación los valores de variables y propiedades de los controles se mantengan.

Para ello deberíamos recurrir a la subrutina Sub Activity_Pause (UserClosed As Boolean) y poner los valores de variables que existen en ese momento.

Pero Basic4Android ofrece una posibilidad más sencilla, es cargar un módulo llamado StateManager, con este módulo podemos mantener los valores de las variables y sus propiedades aunque cambiemos su orientación.

Seguimos el tutorial de sus foros StateManager. Añadimos nuevas líneas a nuestro código.

Código del programa
' Juan Antonio
' juana1991@yahoo.com

Sub Process_Globals

End Sub

Sub Globals
    Dim comida As String
    Dim EditText1 As EditText
    Dim CheckBox1, CheckBox2, CheckBox3 As CheckBox
    Dim Label2 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("Layout")
    If StateManager.RestoreState(Activity, "Main", 60) = False Then

    End If
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)
 If UserClosed Then
        StateManager.ResetState("Main")
    Else
        StateManager.SaveState(Activity, "Main")
    End If
    StateManager.SaveSettings
End Sub

Sub Button1_Click
    comida = ""
    If CheckBox1.Checked = True Then comida = "pescado, "
    If CheckBox2.Checked = True Then comida = comida & "carne, "
    If CheckBox3.Checked = True Then comida = comida & "fruta. "
    comida =  EditText1.Text & ", has elegido: " & comida
    Label2.Text = comida
End Sub

Además hace falta cargar un módulo. Esto se hace mediante.
Project / Add New Module / Code Module

le llamamos StateManager



En el módulo StateManager ponemos el código correspondiente.
Lo puedes encontrar en... el último de esta página.

Además hace falta marcar las Librerías: RandomAccessFile y Reflection.

Una vez realizado todo esto, prueba marcar elementos de la aplicación, poner el móvil en horizontal y vertical.
Pulsar el botón de "Atrás" del móvil.... las variables deben permanecer con sus valores y los controles con las propiedades elegidas.

________________________________________________

2.- Mantener controles y variables cuando cambia la orientación, mediante otro código.

Vamos a realizarlo de otra manera sin necesidad del módulo StateManeger ni las librería indicadas anteriormente.

En este caso solo le prestamos atención al valor de las variables.

Creamos un nuevo proyecto llamado orientacion_2

______________
- Designer.

Creamos los controles

 

 

Insertamos mediante
Designer / Add View

Label1           Text = Escribe tu nombre
EditText1
EditText2
Button1          Text = Pulsa

 

Guardamos el Designer:
File / Save : Layout

Recuerda que para que el Designer muestre los controles en el emulador debemos de pulsar en...

Designer / Tools / Connect to Device / Emulator

______________
- Código.

Código del programa
' Juan Antonio Villalpando
' juana1991@yahoo.com

Sub Process_Globals
' En el elemento guarda de Tipo Guardador, se guardarán en distintos cajones las variables.
 Type Guardador (cajon1 As String, cajon2 As String, cajon3 As Int, cajon4 As Int)
 Dim guarda As Guardador
End Sub

Sub Globals
    Dim EditText1, EditText2 As EditText
    Dim suma As Int
    suma = 0
End Sub
Sub Valores_iniciales
    guarda.cajon1 = ""
    guarda.cajon2 = ""
    guarda.cajon3 = 0 
    guarda.cajon4 = 0
End Sub

Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        Valores_iniciales
    End If   
    Activity.LoadLayout("Layout")
End Sub

Sub Activity_Resume
    ' Al volver a funcionar la aplicación después de haber cambiado la orientación.
    ' Se recuperan los valores guardado en los cajones.
    EditText1.Text = guarda.cajon1
    EditText2.Text = guarda.cajon2
    suma = guarda.cajon3
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    If UserClosed Then
    ' El usuario quiere cerrar la aplicación.
    ' Pondremos valores iniciales.
        Valores_iniciales
    Else
    ' Al cambiar de orientación entra en funcionamiento esta Subrutina
    ' y guarda las variables en cajones.
    guarda.cajon1 = EditText1.Text
    guarda.cajon2 = EditText2.Text
    guarda.cajon3 = suma

    End If
End Sub
Sub Button1_Click
    suma = suma + 1
    EditText2.Text = suma   
End Sub
      

En este caso creo un Type Guardador preparado para guardar distintos valores de String y Int.
guarda será la variable que utilizará este Type.

Cuando cambio de orientación se ejecuta la Subrutina Pause y guarda losl valores de las variables actuales en guarda.

Cuando la aplicación ya ha tomado la orientación se ejecuta la Subrutina Resume y carga los valores de las variables guardadas.

Recuerda para cambiar la orientación de la pantalla pulsa Control F11.

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información