IDIOMAS

Google-Translate-Chinese Google-Translate-Spanish to French Google-Translate-Spanish to German Google-Translate-Spanish to Japanese Google-Translate-Spanish to English Google-Translate-Spanish to Russian Google-Translate-Spanish to Portuguese Google-Translate-Spanish to Italian

miércoles, 1 de abril de 2015

Como programar el TABS HOST en Android Studio. Ejemplo con código Java.

En numerosas App encontramos en sus pantallas las TABS (pestañas). Son muy útiles para los programadores, porque nos ahorra código y nuevas ACTIVITIES, y para los usuarios, que nos permite tener opciones, menús e información extra sin "perdernos" por la aplicación. 
A demás es una alternativa a los FRAMES (hablaremos en otra entrada de blog).
A continuación vemos a ver en un ejemplo práctico donde iremos comentando los pasos a seguir.

En la PALETTE (paleta de WIDGET) buscaremos TABHOST, damos clic y, sin soltar, arrastramos sobre nuestro LAYOUT (relative en este caso) y soltamos en la parte superior:




- En COMPONENT TREE, hacemos clic en las flechas y desplegamos la estructura del TABHOST. Este se compone de un LINEARLAYOUT principal y de los TABS formados por FRAMELAYOUTS (vienes tres por defecto):




- Debemos asignar un ID a cada TAB:




- Nos cambiará en nombre de las pestañas por el nombre del ID. No os preocupéis, de momento esta bien así. Más adelante le podremos poner el nombre que nosotros querremos mediante código:




- Para las demás TABS:





Aquí os dejo el código en XLM:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TabHost
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/tabHost"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"></TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <LinearLayout
                    android:id="@+id/ejemplo1"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"></LinearLayout>

                <LinearLayout
                    android:id="@+id/ejemplo2"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"></LinearLayout>

                <LinearLayout
                    android:id="@+id/ejemplo3"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"></LinearLayout>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</RelativeLayout>



Ya tenemos creada la interfaz de nuestro TABHOST. Ahora vamos a escribir el código en JAVA dentro el OnCreate de nuestro MainActivity:


public class MainActivity extends ActionBarActivity {
    
    TabHost TbH;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TbH = (TabHost) findViewById(R.id.tabHost); //llamamos al Tabhost
        TbH.setup();                                                         //lo activamos

        TabHost.TabSpec tab1 = TbH.newTabSpec("tab1");  //aspectos de cada Tab (pestaña)
        TabHost.TabSpec tab2 = TbH.newTabSpec("tab2");
        TabHost.TabSpec tab3 = TbH.newTabSpec("tab3");

        tab1.setIndicator("UNO");    //qué queremos que aparezca en las pestañas
        tab1.setContent(R.id.ejemplo1); //definimos el id de cada Tab (pestaña)

        tab2.setIndicator("DOS");
        tab2.setContent(R.id.ejemplo2);

        tab3.setIndicator("TRES");
        tab3.setContent(R.id.ejemplo3);

        TbH.addTab(tab1); //añadimos los tabs ya programados
        TbH.addTab(tab2);
        TbH.addTab(tab3); 

    }


En el código podemos cambiar el nombre a las pestañas. Compilando el proyecto en el emulador, nos debería aparecer:



Sólo quedará por llenar los LAYOUTS de cada TAB por medio de XLM, o directamente en el COMPONENT TREE arrastrando desde el PALETTE los elementos que queremos. Todos los nuevos elementos se programarán desde el OnCreate de la ACTIVITY donde se ubica el TABHOST.

Saludos a tod@s y gracias por la visita!

24 comentarios:

  1. Buenisimo el Tutorial, funcion perfecto amigo, gracias, me pregunto como deberia ser al tomar cada pestaña por separado con su clase. Saludos

    ResponderEliminar
  2. Hola niko_1, a ti por tu visita. Puedes programar botones, imágenes, etc... dentro la misma clase donde se encuentra el TABHOST, en el OnCreate. Sólo arrastra los elementos que desees via XLM, o escibiéndolos, en los Layouts de cada HOST. Luego, el código. Otra cosa seria los FRAGMENTS. Saludos

    ResponderEliminar
  3. Hola amigo muy buen tutorial, fijate que realice todo el proceso de manera correcta pero al tiempo de ejecutarlo en mi emulador no me parece nada, Me podrías ayudar por favor ?

    ResponderEliminar
    Respuestas
    1. Hola Rol. Cual es el problema exactamente? Si no te aparecen los TABS puede ser que no las hayas colocado en el ACTIVITY que aparece como LAUNCHER en tu MANIFEST, o sea, la ACTIVITY que aparece primera al abrir tu APP.

      Eliminar
  4. Hola te consulto, el ejemplo me funciona todo bien, como puedo hacer para llamar mediante un boton que se encuentra en uno de los tabs a un activity (segunda), lo programo de la siguiente manera pero me da error

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {


    @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, segunda.class);
    startActivity(intent);
    }
    });

    ResponderEliminar
    Respuestas
    1. Button tu_boton;

      ...


      tu_boton=(Button)findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {


      @Override
      public void onClick(View v) {
      Intent intent = new Intent(MainActivity.this, segunda.class);
      startActivity(intent);
      }
      });

      Eliminar
    2. gracias por responder, siguiendo la aplicación con el debuger el problema lo tenia en la clase segunda, gracias

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Hola amigo, muy bueno el tutorial. ¿Sabrías decirme que hacer para que pueda pasar en las diferentes tabs con el desplazamiento del dedo?

    ResponderEliminar
    Respuestas
    1. Hola Sergio, siento contestar tarde. Puedes probar de inclui el TAB dentro de un SCROLL LAYOUT horizontal o utilizar FRAGMENTS. Espero haber ayudado

      Eliminar
  8. Hola me gustaria saber como puedo cambiar el color de la letra del Tab, y tambien la linea que sale abahjo cuando esta seleccionado uno, muchas gracis y buen tutorial!!

    ResponderEliminar
    Respuestas
    1. Hola Xavi, prueba en el código XLM esto: android:textColor=""

      Eliminar
  9. Hola quisiera saber como puedo hacer para agregar indefinidamente linear Layouts que no esten en el activity main es exacto lo que buscaba pero ahora que encontre esto me surgio este problema me podrias ayudar, el metodo setContent me pide awuevo un id pero si agrego el linear layout me marca error o como crear un linear layout y asignarle un id dinamicamente graciass

    ResponderEliminar
    Respuestas
    1. Hola, perdona, no entiendo bien tus perguntas. Te puedo contestar cono minino una; el ID de los Layouts los puedes incluir en el menú de la derecha de propiedades o doble click sobre el elemento para poder acceder a las configuaraciones básicas rapidamente

      Eliminar
  10. Hola disculpa, muy buen tutorial, sin embargo trato de llamar una actividad diferente desde cada Tab, yo lo hago de esta manera pero detiene la app:

    tabHost.setup();
    TabHost.TabSpec tab1 = tabHost.newTabSpec("tab1");

    tab1.setIndicator("", getResources().getDrawable(R.mipmap.ic_launcher));

    tabFeed.setContent(new Intent(this, Tab1.class));
    tabHost.addTab(tab1);

    ResponderEliminar
    Respuestas
    1. Intent intent = new Intent ( this, Tab1.class );
      tabHost.setContent(intent);

      Eliminar
    2. Gracias por responder mi buen, sin embargo lo he hecho de esa manera y tampoco me ha funcionado, acaso es necesario configurar de alguna manera la clase Tab1?

      Una vez mas gracias por su valiosa ayuda.

      Eliminar
  11. Resulta que en mi app tengo 4 tabs, de los cuales uno de ellos es el perfil de la persona. Me gustaria que cuando el usuario abra el activity que contiene estos 4 tabs, se redireccione solo al tab del perfil y no que me abra automaticamente el primer tab ( de izquierda a derecha ) ¿Es posible ? espero haber sido claro. Muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola, lo mas sencillo seria colocar el perfil en la primera pestaña. He buscado informacion al respecto pero no he encontrado. Siento no poder ayudar. En stackoverflow.com puedes encontrar alguna solucion parecida a lo qie buscas. Saludos

      Eliminar
    2. Hola, lo mas sencillo seria colocar el perfil en la primera pestaña. He buscado informacion al respecto pero no he encontrado. Siento no poder ayudar. En stackoverflow.com puedes encontrar alguna solucion parecida a lo qie buscas. Saludos

      Eliminar
  12. hola que tal
    como puedo hacer para cambiar las tabs deslizando el dedo en la pantalla

    ResponderEliminar