Podramos decir que la ActionBar es una barra de herramientas que nos permite ubicar al
usuario en todo momento indicando en que actividad se encuentra (a travs de un titulo y
subtitulo) y a parte nos proporciona un espacio para crear acciones de usuario (ya sean
botones de accin, botn de bsqueda, listas desplegables, tabs, ...)
La API de esta herramienta apareci por primera vez en Android 3.0 (API 11) pero a travs
de la librera de compatibilidad "android-support-v7-appcompact" podemos hacerla
compatible a partir de Android 2.1 (API 7). En esta guia haremos uso de dicha librera para
hacer compatible la ActionBar con el mayor numero de dispositivos posibles.
Para la realizacin de este articulo se ha cogido como base la guia de desarrolladores
Android: ActionBar. Al final de este articulo tendremos la descarga del proyecto con todo lo
incluido en l.
Comentar que tendramos la posibilidad de crear una ActionBar a travs de una librera
externa que prcticamente es una extensin de la librera de compatibilidad que usaremos
en este articulo. Dicha librera se llama ActionBarSherlock y es compatible a partir de
Android 2.0 (API 5).
Tabla de contenidos
1. Aadir librera de compatibilidad
2. Utilizar ActionBar en nuestro proyecto
2.1 Aadir elementos de accin
2.2 Manejar clicks en los elementos de accin
2.3 Habilitar el botn volver en la ActionBar
2.4 Dividir ActionBar
2.5 Aadir drop-dwon (spinner)
2.6 Aadir una vista de accin
2.7 Aadir un proveedor de accin
2.8 Crear layout personalizado
3. Crear men de navegacin (Navigation Drawer)
3.1 Habilitar el icono de la ActionBar
3.2 Manejar eventos click del men
3.3 Manejar eventos de apertura y cierre del men
4. Creacin de pestaas (Tabs)
4.1 Crear views deslizantes (ViewPager)
4.2 Crear tabs para ViewPager
4.3 Utilizar view desplazables
5. Aplicar estilo a la ActionBar
6. Cdigo fuente del articulo
1. Aadir librera de
compatibilidad
Primero debemos importar la librera a nuestro workspace siguiendo estos pasos:
1.
File/Import/Android/Existing Android Code Into Workspace.
2.
Buscamos la librera ubicada en la carpeta /androidsdk/extras/android/support/v7/appcompact/
3.
Seleccionamos la librera y finalizamos.
Con esto ya tenemos la librera cargada en nuestro workspace. Lo siguiente es aadir la
librera a nuestro proyecto siguiendo estos pasos:
1.
Seleccionamos nuestro proyecto y entramos en sus Propiedades (hay varias
maneras de hacerlo: desde el men Project, con click derecho encima de nuestro proyecto
o combinando las teclas Alt+Enter).
2.
Una vez abierta la nueva ventana pinchamos abajo del todo en Add...
3.
Seleccionamos la librera y aceptamos.
Al final debe quedar algo muy similar a esta captura:
2. Utilizar ActionBar en
nuestro proyecto
Para hacer visible la ActionBar en nuestra aplicacin simplemente deberemos editar el
AndroidManifest y establecer un theme del conjunto de temas "Theme.AppCompact".
Podemos hacerlo directamente en <application ...> o en la <activity ...>, todo dependern
de nuestras necesidades.
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
</application>
<activity
...
...
android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
</activity>
//Ocultar ActionBar
actionBar.setIcon(Drawable);
//Establecer icono
actionBar.setTitle(CharSequence);
//Establecer titulo
actionBar.setSubtitle(CharSequence);
//Establecer Subtitulo
<item
android:id="@+id/buscar"
android:title="@string/menu_buscar"
android:icon="@drawable/buscar"
yourapp:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/cortar"
android:title="@string/menu_cortar"
android:icon="@drawable/cortar"
yourapp:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/copiar"
android:title="@string/menu_copiar"
android:icon="@drawable/copiar"
yourapp:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/eliminar"
android:title="@string/menu_eliminar"
android:icon="@drawable/eliminar"
yourapp:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/compartir"
android:title="@string/menu_compartir"
android:icon="@drawable/compartir"
yourapp:showAsAction="ifRoom|withText"/>
</menu>
Para crear un tem o elemento de accin simplemente utilizaremos los atributos "id" y
"title". Con esto conseguiremos que en nuestra aplicacin nos muestre un men
desplegable.
Si lo que queremos es mostrar los elementos de accin como un icono en el ActionBar,
deberemos aadir a la declaracin de nuestro men, la siguiente herramienta:
xmlns:yourapp="http://schemas.android.com/apk/res-auto"
Donde "yourapp" tenemos que sustituirlo por el nombre del paquete de nuestra aplicacin,
ejemplo:
xmlns:com.example.actionbar="http://schemas.android.com/apk/resauto"
Una vez hecho esto ya podremos hacer uso del atributo "showasaction" en el que
tendremos que hacer exactamente lo mismo con "yourapp". Este atributo nos permite
controlar de que manera se va a mostrar el elemento de accin. Tiene las siguientes
configuraciones:
1.
ifRoom (Mostrara el "icon" en el ActionBar si tiene espacio)
2.
always (Mostrara siempre el "icon" en el ActionBar)
3.
withText (Se debe usar junto a "ifRoom" o "always" y mostrara el "icon" + "title" si
tiene espacio)
4.
never (El tem siempre estar incluido en el men desplegable)
Deberemos tener en cuenta que hacer uso de la conflagracin "always" puede causar
problemas de diseo en dispositivos con pantallas pequeas, por lo que es mas que
recomendable utilizar la configuracin "ifRoom" para que nos gestione el espacio
disponible y muestre automticamente los elementos de accin que entren en ese espacio.
Una vez creado el recurso men con los elementos de accin necesarios deberemos inflar
la vista en nuestra activity a travs del siguiente mtodo:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
Para la creacin de los iconos podemos visitar esta herramienta de Android Studio: Action
Bar and Tab Icon Generator
El resultado puede ser el siguiente:
case R.id.buscar:
Toast.makeText(getApplicationContext(), "BUSCAR",
Toast.LENGTH_SHORT).show();
return true;
case R.id.cortar:
Toast.makeText(getApplicationContext(), "CORTAR",
Toast.LENGTH_SHORT).show();
return true;
case R.id.copiar:
Toast.makeText(getApplicationContext(), "COPIAR",
Toast.LENGTH_SHORT).show();
return true;
...
...
...
default:
return super.onOptionsItemSelected(item);
}
}
Lo primero que hacemos es crear un switch para manejar los diferentes botones de accin
que hayamos declarado en nuestro recurso men. Al switch le aplicamos el mtodo
"getItemId()" para conocer la id del botn de accin que ha sido pulsado y para terminar
creamos tantos casos como botones de accin tengamos. En este caso simplemente
mostramos un Toast al pulsar un botn de accin.
Android nos permite habilitar el icono de la ActionBar como un botn volver. Para ello
tenemos que seguir dos pasos:
1
Indicar a que actividad volver despus de pulsar el botn volver, para ello
tenemos dos posibilidades de hacerlo:
(2.1) Especificar la actividad padre en el AndroidManifest (es la mejor opcin cuando la
actividad padre siempre es la misma, a continuacin se muestra un ejemplo)
<activity
android:name="com.example.actionBar.ActionBarActivity"
android:parentActivityName="com.example.actionBar.MenuPrincipal">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.actionBar.MenuPrincipal"/>
</activity>
(2.2) Reemplazar los metodos "getSupportParentActivityIntent()" y
"onCreateSupportNavigateUpTaskStack()" en nuestra activity (esta forma es apropiada
cuando la actividad padre puede ser diferente).
android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow" />
</activity>
Empezaremos creando un recurso string-array que nos servira para almacenar los items
de la lista desplegable, podemos hacerlo tanto dentro del archivo strings.xml o bien
podemos crear uno nuevo, como nos sea mas cmodo.
<resources>
<string-array name="lista">
<item>Lunes</item>
<item>Martes</item>
<item>Miercoles</item>
<item>Jueves</item>
<item>Viernes</item>
<item>Sabado</item>
<item>Domingo</item>
</string-array>
</resources>
activity:
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
Una vez hecho esto necesitaremos crear un adaptador "SpinnerAdapter" que utilizaremos
para indicar que items se mostraran en la lista desplegable (el recurso string-array creado
antes) y que diseo tendr dicha lista.
SpinnerAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.lista,
android.R.layout.simple_spinner_dropdown_item);
...
}
return false;
}
Lo primero que tenemos que hacer para crear una vista de accin es generar un recurso
"menu" indicando el atributo "actionLayout" o "actionViewClass". De esta manera
crearemos un recurso de diseo o una clase widget respectivamente. Vamos a ver como
crear el recurso para el "SearchView" de la imagen de arriba:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:com.example.actionbar="http://schemas.android.com/apk/resauto" >
<item
android:id="@+id/buscar"
android:title="@string/menu_buscar"
android:icon="@drawable/ic_action_search"
com.example.actionbar:showAsAction="ifRoom|
collapseActionView"
com.example.actionbar:actionViewClass="android.support.v7.widget.Se
archView"/>
</menu>
Cosas a tener en cuenta, primero acordaros de cambiar el nombre de paquete y poner el
de vuestra aplicacin (sustituir "com.example.actionbar").
En el atributo showAsAction estamos indicando "collapseActionView" para establecer que
el tem tiene que aparecer en la aplicacin como un elemento de accin (imagen 1).
Y por ultimo en el atributo actionViewClass establecemos la clase widget del SearchView a
travs de la librera de soporte v7.
Solo nos quedara configurar el mtodo onCreateOptionsMenu para hacer funcional esta
vista de accin. Voy a explicar como hacerlo y a parte le vamos a aplicar dos listeners. Uno
para cuando se expanda y se cierre el elemento de accin y otro para cuando el usuario
introduzca un texto y lo acepte. Por lo tanto pongo el cdigo y luego lo explico un poco:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.vistabusqueda, menu);
return super.onCreateOptionsMenu(menu);
}
Lo primero que hacemos es inflar la vista creada anteriormente a travs del mtodo
getMenuInflater().
Seguidamente creamos un objeto MenuItem correspondiente al tem creado en el recurso
men. Este sera el elemento de accin que veremos en el ActionBar.
Seguimos creando otro objeto SearchView al que le aplicaremos la vista del elemento de
accion que hemos creado antes, para ello utilizamos el mtodo getActionView(). De esta
manera estamos convirtiendo el elemento de accin en una vista de accin. Si ejecutamos
el cdigo en este punto obtendremos como resultado lo que se ve en las imgenes de
arriba.
Para configurar los listener debemos implementar las interfaces "OnQueryTextListener" y
"OnActionExpandListener". Una vez hecho esto ya podemos aplicar los listeners a los dos
objetos creados en el "onCreateOptionsMenu" (las dos siguientes lineas de cdigo).
Al implementas estas dos interfaces estamos obligados a sobreescribir los siguientes
mtodos:
public boolean onQueryTextChange(String arg0) {
return false;
}
public boolean onQueryTextSubmit(String arg0) {
return false;
}
public boolean onMenuItemActionCollapse(MenuItem arg0) {
return true;
}
public boolean onMenuItemActionExpand(MenuItem arg0) {
return true;
}
Los dos primeros mtodos corresponden a la interface "OnQueryTextListener". Con el
primero podemos trabajar en el momento que el usuario pincha el elemento de accin y se
expande el edittext capturando todo lo que haga. Con el segundo mtodo podremos
trabajar cuando el usuario acepte una bsqueda.
Y para terminar los dos siguientes mtodos corresponden a la interface
"OnActionExpandListener". El primero lo usaremos para cuando el elemento de accin se
cierre. Y el segundo mtodo para cuando el elemento de accin se expanda.
Es muy similar al ejemplo anterior (vista de accin) pero en este caso un "action provider"
o proveedor de accin reemplazara a un elemento de accin con un diseo personalizado.
Esto quiere decir que un proveedor de accin tiene todo el control del elemento de accin
y es capaz de mostrar un submenu al pulsar el botn de accin entre otras cosas.
Tenemos la posibilidad de crear nuestro propio proveedor de accin utilizando la clase
"ActionProvider" aunque Android por defecto nos ofrece la posibilidad de crear alguno
como el "ShareActionProvider" que seria el botn de compartir que aparece en alguna que
otra aplicacion, el de la imagen:
En este caso tenia preparado crear lo que se ve en la imagen que es lo que incluye el
cdigo fuente del final del articulo pero he decidido crear un ActionProvider personalizado y
hacer algo similar al ejemplo anterior (vista de accin) para ver el resultado mas
rpidamente y tener una base de esto.
La documentacin Android nos dice que tenemos que crear nosotros mismos nuestro
ActionProvider, por lo tanto empezaremos creando una clase que extienda de
ActionProvider:
public class BusquedaAP extends ActionProvider{
Context context;
super(context);
this.context = context;
}
<EditText
android:id="@+id/edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</RelativeLayout>
Continuamos creando un recurso men que har referencia a nuestra clase "BusquedaAP"
<item
android:id="@+id/buscar"
android:title="@string/menu_buscar"
android:icon="@drawable/ic_action_search"
com.com.example.actionbar:showAsAction="always|
collapseActionView"
com.com.example.actionbar:actionProviderClass="com.example.actionba
r.BusquedaAP"/>
</menu>
Recordar cambiar el nombre del paquete y la clase en el atributo "actionProviderClass"
para hacer referencia a la clase que hayamos extendido de ActionProvider.
Por ultimo solo nos queda configurar el cdigo Android, para ello inflaremos el men que
acabamos de crear en el mtodo "onCreateOptionsMenu()":
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.busqueda_ap, menu);
return super.onCreateOptionsMenu(menu);
}
Es un ejemplo muy rpido de las posibilidades que ofrece utilizar un proveedor de accin o
ActionProvider. El tema es un poco mas extenso al utilizar la clase ActionProvider porlo
que es mas que recomendable echarle un ojo en google. Pero la idea es esa, adaptar un
botn de accin a lo que nosotros queramos.
3. Crear men de
navegacin
Este tipo de men se llama "Navigation Drawer" y es un panel oculto que esta ubicado en
el borde izquierdo de la pantalla. Se puede hacer visible de dos maneras, o bien haciendo
un gesto desde la izquierda de la pantalla o pulsando directamente el icono de la
ActionBar.
Para aadir el men de navegacin a nuestra aplicacin tenemos que hacer uso de la API
"DrawerLayout" disponible en la librera de compatibilidad v4.
Primero deberemos crear el layout del DrawerLayout:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
Al hacer uso de DrawerLayout, deberemos especificar 2 tipos de vista:
1.
Una vista principal que sera la mostrada por la activity (en este caso es un
FrameLayout)
2.
Otra vista para el men de navegacin (en este caso un simple listview)
En la segunda vista (listview) deberemos indicar su gravedad (normalmente "start") y su
anchura (no debe sobrepasar los 320dp).
Una vez creada la vista del Navigation Drawer ya podemos pasar a nuestra actividad para
trabajar con ella. Primero extenderemos la clase "ActionBarActivity" y con el siguiente
String[] valores =
getResources().getStringArray(R.array.cajon);
cajon = (DrawerLayout) findViewById(R.id.drawer_layout);
ListView opciones = (ListView)
findViewById(R.id.left_drawer);
opciones.setAdapter(new ArrayAdapter(this,
R.layout.plantilla_cajon, valores));
}
}
Primero establecemos la vista creada anteriormente a travs del mtodo setContentView().
Creamos un array String que usaremos para aplicar al ListView (sern todas las opciones
de nuestro Navigation Drawer)
Continuamos creando un objeto ListView.
Y aplicamos un adaptador para ese ListView
Con esto ya podramos visualizar la actividad con su men de navegacin. Lo nico que
para acceder al men solo podramos hacerlo dibujando el gesto desde el lado izquierdo.
Vamos a continuar y a ver como podramos habilitar el icono de la aplicacin para acceder
a este men.
}
El primero mtodo sera llamado una vez que la actividad haya sido creada (justo despus
del onStart y onRestoreInstanceState). En el simplemente le aplicamos el mtodo
"syncState()" al objeto "toggle" para sincronizar el estado del icono de la aplicacin con
nuestro DrawerLayout.
El segundo mtodo sera llamado cuando haya cambios en la configuracin del sistema.
Por lo tanto aplicaremos la nueva configuracin a nuestro objeto "toggle" a travs del
mtodo "onConfigurationChanged()".
Y el ultimo mtodo no es realmente necesario pero nos puede servir para manejar los
clicks en nuestro men de navegacin. Este sera llamado cuando tenga lugar un click en
nuestro men. En el simplemente indicamos que si se a pulsado una opcin del men
devuelva true. Tendramos la posibilidad de manejar los clicks en nuestro men a travs
del parmetro MenuItem de dicho mtodo.
El resultado despus de crear todo lo anterior es el siguiente:
4. Creacion de pestaas
(Tabs)
Crear pestaas o tabs en nuestra aplicacin puede ser una buena practica de cara al
usuario, le ayudara a explorar nuestra aplicacin y le sera fcil cambiar entre las diferentes
vistas rpidamente. Comentar que cuando el tamao de pantalla es lo suficientemente
grande (normalmente pantalla en modo landscape o tablets) estas pestaas aparecen
dentro de la ActionBar junto a los elementos de accin. Por otro lado cuando el tamao de
pantalla es reducido (smartphones con pantalla pequea) estas pestaas suelen aparecer
en barra separada justo debajo de la ActionBar.
A continuacin vamos a ver como crear tabs de una manera muy sencilla. Lo primero que
nos dice la documentacin Android es que tenemos que implementar la interface
"ActionBar.TabListener" por lo tanto crearemos la siguiente clase para ello:
public class TabsListener <T extends Fragment> implements
TabListener {
}
Esta clase sera la encargada de manejar los eventos que tengan lugar en las pestaas o
tabs. Al implementar la interface "ActionBar.TabListener" debemos sobreescribir los
mtodos "onTabSelected()", "onTabUnselected()" y "onTabReselected()" que practicamente
el nombre lo dice todo.
En este caso cuando se seleccione una pestaa simplemente reemplazamos el fragmento
y establecemos la view de ese fragmento. Para las pestaas que no estn seleccionadas
simplemente eliminamos ese fragmento y por lo tanto su view. De esta manera lo que
estamos haciendo es que se cargue la view de un fragmento cada vez que pulsamos una
pestaa y para las pestaas no seleccionadas se elimine la view de cada fragmento. No es
la manera mas practica pero es un buen comienzo.
Lo siguiente que tenemos que hacer es crear los fragmentos, por cada pestaa que
queramos incluir en la aplicacin tendremos que crear un fragmento. En este caso solo voy
a exponer como se crea un fragmento pero en la aplicacin del final del articulo lo veres
con tres. Por lo tanto vamos a crear una nueva clase que extienda de "Fragment":
public class Fragment_Productos extends Fragment {
return rootView;
}
}
Esta clase tambin es muy simple, os recomiendo echarle un ojo a los fragmentos porque
tiene bastantes mas posibilidades de las que se exponen aqu. En este caso hemos
creado previamente un layout "fm_productos" en el que simplemente ponemos un texto en
medio de la view.
Una vez creado el layout pasamos a la clase "Fragment_Productos" que extendemos de
"Fragment". Dentro de la clase simplemente sobreescribimos el mtodo "onCreateView()"
que sera el encargado de crear la vista cada vez que pulsemos en una pestaa. Dentro del
mtodo simplemente inflamos el layout creado previamente, configuramos el texto y
establecemos un nuevo texto.
Recordar que tendramos que repetir este paso por cada pestaa que creemos para
nuestra aplicacin. Ya por ultimo solo nos queda crear nuestra activity, dejo el cdigo y lo
explicamos debajo:
public class CrearTabs extends ActionBarActivity {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
/**CREAR TABS**/
Tab tab = actionBar.newTab()
.setText(R.string.productos)
.setTabListener(new TabsListener(
this, "productos", Fragment_Productos.class));
actionBar.addTab(tab);
....
....
....
}
}
Al crear nuestra activity extendemos la clase "ActionBarActivity" y sobreescribimos el
mtodo "onCreate()". Dentro del mtodo creamos el objeto ActionBar y ponemos el modo
de navegacin de la ActionBar en modo pestaas o tabs.
Y ya para terminar tendramos que crear tantas pestaas como fragmentos hayamos
creado. Para crear una nueva pestaa utilizamos el mtodo "newTab()" al que le indicamos
el texto a mostrar en la pestaa a traves del metodo "setText()". Tambin podramos
indicarle un icono a mostrar a travs del mtodo "setIcon()" pero no es el caso. Seguimos
creando el listener para esa pestaa, aqu es donde entra la clase creada al principio de
este punto. Por lo tanto creamos el listener para esa pestaa a travs del mtodo
"setTabListener()" y le aplicamos un nuevo TabsListener indicando los parmetros del
constructor de esta clase, (una activity, un tag o identificador, y la clase o fragmento). Para
concluir tendremos que aadir la nueva pestaa creada a la actionbar a travs del mtodo
"addTab()".
Si todo nos a salido bien como resultado podremos obtener algo parecido a esto:
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
El siguiente paso es crear las vistas que incluir ese ViewPager. Para ello es necesario
utilizar un "PagerAdapter" y Android nos ofrece dos posibilidades:
1.
FragmentPagerAdapter: es la clase mas indicada para crear un numero
determinado de vistas
2.
FragmentStatePagerAdapter: clase mas indicada para cuando tenemos un numero
indeterminado de vistas, automticamente Android ira destruyendo fragmentos que no
estn a la vista reduciendo el consumo de memoria.
En este caso vamos a partir del ejemplo anterior y vamos a adaptar los mismos
fragmentos. Por lo tanto vamos a crear una clase que extienda de
"FragmentPagerAdapter" estableciendo un numero determinado de tres vistas (en la
aplicacin del final de articulo podris observarlo).
public class PagerAdapter extends FragmentPagerAdapter {
}
}
}
Creamos nuestro adaptador y al extender "FragmentPagerAdapter" nos obliga a crear un
constructor (que en este caso no lo usaremos, por lo tanto lo dejamos tal cual), y
deberemos sobreescribir los mtodos "getItem()" y "getCount". Con el primer mtodo le
estamos indicando que cuando tenga que cargar dicha vista nos cree un nuevo fragmento.
Y con el segundo mtodo simplemente le devolvemos el numero de vistas.
De esta manera siempre tendr cargado en memoria el fragmento o pestaa que este
visible en pantalla y tambin el mas cercano a la derecha e izquierda, el resto de pestaas
o fragmento no existirn hasta que no nos acerquemos a ellos.
Para terminar tendremos que configurar el onCreate de nuestra activity principal por lo
tanto pongo el cdigo y luego lo explico un poco:
public class CrearTabsSwipe extends FragmentActivity {
y le aplicamos el adaptador.
El resultado sern estas tres vistas, conforme deslicemos el dedo veremos una u otra y
siempre tendr cargada en la memoria la vista mas cercana a la que se vea en pantalla:
super.onCreate(arg0);
setContentView(R.layout.tabs_swipe);
mViewPager.setOnPageChangeListener(this);
Tab tab =
actionBar.newTab().setText(R.string.productos).setTabListener(this)
;
actionBar.addTab(tab);
...
...
...
}
}
Primeramente empezamos cambiando la extensin de la clase por "ActionBarActivity" para
poder hacer uso de las tabs. Implementamos las dos interfaces "ActionBar.TabListener" y
"OnPageChangeListener" que mas abajo explicare sus mtodos obligados.
El cdigo es practicamente le mismo hasta el metodo "setOnPageChangeListener()" que le
aplicamos a nuestro ViewPager. Y los pasos siguientes tambin se han visto
anteriormente. Se crea el objeto actionBar para ponerlo en modo tabs y creamos las tres
pestaas aplicndoles el listener a travs del "this"
Ahora vamos con las intefaces muy sencillas tambin, primero con
"ActionBar.TabListener":
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
mViewPager.setCurrentItem(arg0.getPosition());
}
En este caso en vez de utilizar pestaas, simplemente es una barra de informacin donde
le indicara al usuario en que vista esta ubicado. Esta barra de informacin se ira
deslizando conforme el usuario vaya deslizando las vistas o fragmentos.
Primero tendremos que crear el layout, es muy similar al del punto anterior:
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#33b5e5"
android:textColor="#000"
android:paddingTop="4dp"
android:paddingBottom="4dp" />
</android.support.v4.view.ViewPager>
Seguimos utilizando la clase "ViewPager" pero en este caso le aadimos un
"PagerTitleStrip" que nos servir para establecer la vista de la imagen de arriba. Podemos
controlar su gravedad a travs del atributo "layout_gravity" para ponerlo en el top (arriba) o
en el bottom (abajo).
El siguiente paso es crear un adaptador y vamos a coger el del punto 4.1 (PageAdapter y
le vamos a aadir el siguiente cdigo, dentro de su clase como si fuera otro mtodo mas
de la clase:
public CharSequence getPageTitle(int position) {
String titulo = null;
switch (position) {
case 0:
titulo = "PRODUCTOS";
break;
case 1:
titulo = "CLIENTES";
break;
case 2:
titulo = "PEDIDOS";
break;
}
return titulo;
}
Este mtodo sera el encargado de poner el titulo en el nuevo panel informativo que
estamos creando. Comentar que seguimos utilizando los tres fragmentos de siempre (en el
cdigo fuente lo viereis claro).
Para terminar crearemos nuestra activity que viene siendo la misma que hemos creado en
los puntos anteriores:
public class CrearTabsSwipe2 extends ActionBarActivity {
5. Aplicar estilo a la
ActionBar
Una buena manera de crear los recursos de iconos para nuestra ActionBar (ya sea para
elementos de accion o tabs) es utilizar la herramienta: ActionBar and Tab Icon Generator
Tambin podemos crear los recursos del icono del men de navegacin o Navigation
Drawer a travs de la siguiente herramienta: Navigation Drawer Indicator Generator
Y para terminar recomiendo crear un tema para nuestra ActionBar a travs de la
herramienta: ActionBar Style Generator. Indicando en "Style compatibility" que sea un
tema para "AppCompact", de esta manera conseguiremos que sea compatible con
versiones anteriores de Android.
Una vez creado el tema para nuestra ActionBar tendremos que descomprimir e incluir
todas las carpetas en nuestro proyecto. Teniendo esa base podremos modificar cualquier
cosa a nuestro gusto a parte de aprender como se modifica cada cosa de la ActionBar.
Un ejemplo de lo que podramos hacer con esto es el siguiente: