- Presentación.
- El TabHost es parecido a los Paneles. Consiste en una serie de botones superiores o pestañas que al pulsarlos entra en distintas pantallas.
Creamos los controles
|
- El programa carga el Layout principal llamado "main".
- Luego añade añade los distintos Layout mediante: TabHost1.AddTab("Color", "page2")
- Si quisieramos tener más pestañas, crearíamos más Layout, le daríamos un nombre y lo añadiríamos.
- En la primera pestaña además carga un par de iconos bmp1 y bmp2:
TabHost1.AddTabWithIcon ("Name", bmp1, bmp2, "page1")
- Los botones hacen cambiar los distintos Layout:
Sub btnNext1_Click
TabHost1.CurrentTab = 1 'move to next tab
End Sub
- El botón btnDone, crea una ventana emergente con distintas cadenas de caracteres
Sub btnDone_Click
Dim sb As StringBuilder
sb.Initialize
sb.Append("You have entered:").Append(CRLF)
sb.Append("Name: ").Append(txtName.Text).Append(CRLF)
sb.Append("Color: ").Append(txtColor.Text).Append(CRLF)
sb.Append("Animal: ").Append(txtAnimal.Text)
Msgbox(sb.ToString, "")
End Sub
|
El TabHost viene muy bien explicado en el Tutorial Basic4Android,
Así que me voy a basar en ese ejemplo.
Entramos en el código y pulsamos el icono de forma de carpeta situado abajo del panel derecho.
Observamos que el programa está compuesto por varios Layout, en este caso se llaman main.bal, page1.bal, page2.bal y page3.bal
Podemos entrar en los distintos Layout, yendo a Designer / File / Open
.
Este es el Larout principal, su nombre es main.bal y consta de un TabHost.
Este Layout se llama page1.bal y consta de un Label, EditText y un Button.
Al Button lo denomina: btnNext1
Al EditText lo denomina: txtName
Este Layout se llama page2.bal y consta de un Label, EditText y un Button.
Al Button lo denomina: btnNext2
Al EditText lo denomina: txtColor
El Activity tiene un degradado de rojo.
Este Layout se llama page3.bal y consta de un Label, EditText y un Button.
Al Button lo denomina: btnDone
Al EditText lo denomina: txtAnimal
El Activity tiene un degradado de negro a blanco vertical
|
______________________________________________
______________________________________________
- Cuando el teléfono cambia su orientación horizontal/vertical, el programa hace una especie de reinicio y pierde el valor de las variables y la ubicación de los controles.
_______________________
- Orientación horizontal / vertical.
NOTA: Este tutorial se complementa con otro llamado 59.- Orientación. Horizontal - Vertical.
Otro asunto importante es la situación de los elementos (View) cuando el teléfono está verticalmente (portrait - foto) u horizontalmente (landscape -paisaje).
Para ello debemos añadir en el Designer una nueva Layout Variants, esto hará que cuando el teléfono esté en vertical los elementos salgan en un lugar y cuando esté en horizontal se ubiquen en otro elegido.
- Si estás utilizando el emulador del SDK verás que según elijas un Layout Variants u otro, los elementos se pueden situar en distinto sitio, uno para el vertical y otro para el horizontal.
NOTA: Para que el emulador se vea en horizontal/vertical, pulsa las teclas: Ctrl + F11
- Si estás utilizando el emulador del Designer que viene a partir de la versión 1.7 de B4A, debes marcar la opción Layout / Match Chosen Variant. En las nuevas guías de principiante, concretamente en la sección 8.7.1 The menu, viene la explicación de cómo hacerlo. La guía de B4A se actualiza cada cierto tiempo, bájate la última actualización.
En resumidas cuentas, debemos tener dos situaciones de los elementos una en vertical y otra en horizontal, pero en el mismo Layout.
__________________________________________
- Proceso de construcción de los layout en horizontal y vertical.
(En otro tutorial veremos más sobre la ubicación de los controles en la pantalla)
Bajar TabHost_Horizontal_Vertical.zip
- Utilizaremos dos Variants.
1.- Creamos mediante el Designer un layout, vertical 320 x 480 e insertamos el View Tabhost1.
Redimensionamos el Tabhost1 para que ocupe todo el Activity.
Guardamos este Designer como Layout
|
EMULADOR
|
2.- Pulsamos en New Variants y creamos un layout horizontal de 480 x 320.
Pulsamos la combinación de teclas Ctrl + F11 para que el emulador se ponga en horizontal.
Reubicamos el Tabhost1 para que ocupe toda la horizontal.
Guardamos el layout. Atención el layout es el mismo de antes(Layout). Es decir, tenemos el mismo layout en horizontal y en vertical.
|
|
3.- En el Designer vamos a File / New y creamos otro layout.
Nuestro layout debe estar en 320 x 480
Atenciòn, debemos pulsar la combinación de teclas Ctrl + F11 para que el emulador se ponga en vertical.
Añadimos y ubicamos un Label1, un EditText1, un Button1 y un Label2.
Guardamos este layout con el nombre de uno.
|
|
4.- Pulsamos en New Variants y creamos un layout horizontal de 480 x 320.
Pulsamos la combinación de teclas Ctrl + F11 para que el emulador se ponga en horizontal.
Reubicamos Label1, un EditText1, un Button1 y un Label2, para situarlos en los lugares convenientes.
Guardamos el layout. Atención el layout es el mismo de antes (uno). Es decir, tenemos el mismo layout en horizontal y en vertical.
|
|
5.- En el Designer vamos a File / New y creamos otro layout.
Nuestro layout debe estar en 320 x 480
Atenciòn, debemos pulsar la combinación de teclas Ctrl + F11 para que el emulador se ponga en vertical.
Añadimos y ubicamos un Label1, un EditText2, un Button2 y un Label4.
He cambiado el número del EditText2, Button2 y Label4 para que no coincidan con el layout uno
Guardamos este layout con el nombre de dos.
|
|
6.- Pulsamos en New Variants y creamos un layout horizontal de 480 x 320.
Pulsamos la combinación de teclas Ctrl + F11 para que el emulador se ponga en horizontal.
Reubicamos Label1, EditText2, Button2 y Label4, para situarlos en los lugares convenientes.
Guardamos el layout. Atención el layout es el mismo de antes (dos). Es decir, tenemos el mismo layout en horizontal y en vertical.
|
|
Ya tenemos los 3 layout en horizontal (480 x 320) y vertical (320 x 480)
Código
|
' Juan Antonio Villalpando
' juana1991@yahoo.com
Sub Process_Globals
Dim valor1, valor2 As String
End Sub
Sub Globals
Dim Tabhost1 As TabHost
Dim EditText1, EditText2 As EditText
Dim Label2, Label4 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
TabHost1.addtab("UNO","uno")
TabHost1.addtab("DOS","dos")
If FirstTime = True Then
valor1 = "0"
valor2 = "0"
End If
End Sub
Sub Activity_Resume
Activity.LoadLayout("Layout")
TabHost1.addtab("UNO","uno")
TabHost1.addtab("DOS","dos")
EditText1.Text = valor1
Label2.Text = "Tu nombre es " & valor1
EditText2.Text = valor2
Label4.Text = "Tu edad es " & valor2
End Sub
Sub Button1_Click
valor1 = EditText1.Text
Label2.Text = "Tu nombre es " & valor1
End Sub
Sub Button2_Click
valor2 = EditText2.Text
Label4.Text = "Tu edad es " & valor2
End Sub
|
- Cuando el teléfono cambia su orientación horizontal/vertical, el programa hace una especie de reinicio y pierde el valor de las variables y la ubicación de los controles.
- Para evitarlo, se crea, de cada layout, uno vertical y otro horizontal.
- Al cambiar la ubicación el programa va a la Subrutina Activity_Resume
en ella debemos poner lo que deseamos que ocurra cuando se cambia la orientación, en nuestro caso volver a cargar el layout principal y volver a colocar las variables.
- Es conveniente que las variables estén declaradas al principio en
Sub Process_Globals
- Una vez más recuerdo que trato de escribir un código sencillo y entendible, en una etapa superior es mejorable.
|
Foro B4A
_________________________________________________
- Detección de si el móvil está en horizontal o vertical.
Dim Orientation As String
If Activity.Width > Activity.Height Then
Orientation = " Landscape "
Else
Orientation = " Portrait "
End If
_________________________________________________
- Otra manera de detectar cuando el móvil está en horizontal o en vertical
If GetDeviceLayoutValues.Height > GetDeviceLayoutValues.Width Then
'portrait orientation
Activity.AddView(lblPlayer, 20dip, 10dip, 200dip, 400dip)
Else
'landscape orientation
Activity.AddView(lblPlayer, 2dip, 10dip, offsetX - 15dip, 200dip)
End If