18 Pestañas (Tabs)
18 Pestañas (Tabs)
18 Pestañas (Tabs)
Pestañas (Tabs)
Hemos visto como dar forma a la interfaz de usuario de nuestra
aplicación mediante el uso de diversos tipos de layouts, como por
ejemplo los lineales, de frame, relativos, u otros más elaborados como
los de tipo lista o tabla. Éstos van a ser siempre los elementos
organizativos básicos de nuestra interfaz, pero sin embargo, dado el
poco espacio con el que contamos en las pantallas de muchos
dispositivos, o simplemente por cuestiones de organización, a veces
es necesario/interesante dividir nuestros controles en varias pantallas.
Y una de las formas clásicas de conseguir esto consiste en la
distribución de los elementos por pestañas o tabs. Android por
supuesto permite utilizar este tipo de interfaces, aunque lo hace de
una forma un tanto peculiar, ya que la implementación no va a
depender de un sólo elemento sino de varios, que además deben
estar distribuidos y estructurados de una forma determinada nada
arbitraria. Adicionalmente no nos bastará simplemente con definir la
interfaz en XML como hemos hecho en otras ocasiones, sino que
también necesitaremos completar el conjunto con algunas líneas de
código. Desarrollemos esto poco a poco.
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:orientation="vertical"
3 android:layout_height="match_parent"
4 android:layout_width="match_parent">
5
6 <TabHost android:id="@android:id/tabhost"
7 android:layout_width="match_parent"
8 android:layout_height="match_parent">
9
10 <LinearLayout
11 android:orientation="vertical"
12 android:layout_width="match_parent"
13 android:layout_height="match_parent" >
14
15 <TabWidget android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:id="@android:id/tabs" />
18
19 <FrameLayout android:layout_width="match_parent"
20 android:layout_height="match_parent"
21 android:id="@android:id/tabcontent" >
22
23 <LinearLayout android:id="@+id/tab1"
24 android:orientation="vertical"
25 android:layout_width="match_parent"
26 android:layout_height="match_parent" >
27
28 <TextView android:id="@+id/textView1"
29 android:text="@string/cont_tab1"
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content" />
32 </LinearLayout>
33
34 <LinearLayout android:id="@+id/tab2"
35 android:orientation="vertical"
36 android:layout_width="match_parent"
37 android:layout_height="match_parent" >
38
39 <TextView android:id="@+id/textView2"
40 android:text="@string/cont_tab2”
41 android:layout_width="wrap_content"
42 android:layout_height="wrap_content" />
43 </LinearLayout>
44 </FrameLayout>
45 </LinearLayout>
46 </TabHost>
47 </LinearLayout>
En Android 2.x
1 TabHost.TabSpec spec=tabs.newTabSpec("mitab1");
2 spec.setContent(R.id.tab1);
3 spec.setIndicator("",
4 res.getDrawable(android.R.drawable.ic_btn_speak_now,null));
5 tabs.addTab(spec);
1 tabs.setOnTabChangedListener(new OnTabChangeListener() {
2 @Override
3 public void onTabChanged(String tabId) {
4 Log.i("AndroidTabsDemo", "Pulsada pestaña: " + tabId);
5 }
6 });
En el método onTabChanged() recibimos como parámetro la
etiqueta identificativa de la pestaña (no su ‘id’), que asignamos cuando
creamos su objeto TabSpec correspondiente (“mitab1”, “mitab2”).
Para este ejemplo, lo único que haremos al detectar un cambio de
pestaña será escribir en el log de la aplicación un mensaje informativo
con la etiqueta de la nueva pestaña visualizada. Así por ejemplo, al
cambiar a la segunda pestaña recibiremos el mensaje de log:
“Pulsada pestaña: mitab2“.
Ejercicios
2. Haz una actividad que tenga tres pestañas. La primera debe ofrecer
la posibilidad de rellenar ciertos datos a través de diferentes
componentes (textos, botones,…). La segunda expondrá la
información generada en la primera de manera más apropiada y la
tercera contendrá un botón ‘Añadir Pestaña’, que cada vez que se
pulse, generará una pestaña nueva dinámicamente y con los textos
“Tab nueva 1”, “Tab nueva 2”, etc. Tanto en la pestaña como dentro
del contenido.