Vamos a realizar una aplicación que nos permita observar la forma en que se crean los tabs y toolbars en android.
El resultado final lo puedes ver aquí: Tabs y toolbars en Android: Resultado final
Comencemos:
Crea un nuevo proyecto.
Abre el archivo build.gradle (Module:app)
Añada a la sección de dependencies las siguientes dos:
implementation ‘com.android.support:support-v4:27.1.1’
implementation ‘com.android.support:design:27.1.1′
Donde la versión coincida con su versión de compileSdkVersion que aparece en ese mismo archivo.
Clic en Sync Now para descargar las dependencias.
Abra su archivo styles.xml (res->layout->values->styles.xml)
Verifique que la linea siguiente efectivamente apunte a NoActionBar
<style name=”AppTheme” parent=”Theme.AppCompat.Light.NoActionBar”>
Con esto indicamos que quite el actionbar, y lo hacemosporque vamos a implementar nuestro propio toolbar.
En la carpeta de res->Layout Agregue un nuevo Layout Resource File con el nombre toolbar.
El código de éste archivo lo puedes ver a continuación:
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
En el activity_main.xml haga referencia a ese archivo
<include
android:id=”@+id/toolbar”
layout=”@layout/toolbar”
/>
Eso iría dentro del constraint layout, antes del textview que en este momento dice Hello World
Vamos a MainActivity e implementamos el toolbar.
Podemos crear una función que nos haga esa labor:
private void setToolBar(){ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_home); getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
Y desde onCreate la mandamos a llamar:
setToolBar();
Nuestra app se vería así:
Cree un nuevo Package con el nombre Fragments (este paso es opcional)
Cree tres fragments: de clic secundario sobre el package Fragments y New->Fragment->Fragment Blank como se ve en la siguiente imagen.
Los nombre de los fragments que usaremos serán: EstadosFragment, ChatsFragment, y LlamadasFragment.
Vaya a EstadosFragment.java y notará la siguiente línea:
return inflater.inflate(R.layout.fragment_estados, container, false);
Modifíquela para que quede de la siguiente forma:
View view = inflater.inflate(R.layout.fragment_estados, container, false);
return view;
Y haga lo mismo para los tres fragments
Vaya a fragment_estados.xml y vamos a modificar el texto por default que contiene:
<TextView android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="90dp" android:text="estados" />
Haga algo similar para los siguientes dos fragments,
En el activity_main.xml agregariamos el código del tablayout. También agregaremos un ViewPager para hacer el efecto de desplazamiento entre los tabs. Éste código lo puedes insertar debajo del toolbar.
<android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="0dp" android:layout_marginStart="0dp" android:layout_marginTop="0dp" android:background="?attr/colorPrimary" android:elevation="4dp" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/toolbar" /> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="459dp" app:layout_constraintTop_toBottomOf="@id/tabLayout" />
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); tabLayout.addTab(tabLayout.newTab().setText("Estados")); tabLayout.addTab(tabLayout.newTab().setText("Chats")); tabLayout.addTab(tabLayout.newTab().setText("Llamadas")); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
En éste momento nuestra app se vería así:
Crear el adaptador
Para mostrar el contenido de los fragments en cada pestaña de los tabs necesitamos un Adaptador. Cree una nueva Clase de Java y nómbrela PagerAdapter (o el nombre que desee proporcionarle).
El código completo de ésta clase es el siguiente:
public class PagerAdapter extends FragmentStatePagerAdapter { private int numberOfTabs; public PagerAdapter(FragmentManager fm, int numberOfTabs) { super(fm); this.numberOfTabs = numberOfTabs; } @Override public int getCount() { return numberOfTabs; } @Override public Fragment getItem(int position) { switch (position){ case 0: return new EstadosFragment(); case 1: return new ChatFragment(); case 2: return new LlamadasFragment(); default: return null; } } }
Ahora debemos implementar éste adaptador.
Vamos a mainactivity.java
En onCreate agregamos:
PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); final ViewPager viewPager = findViewById(R.id.viewPager); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { int position = tab.getPosition(); viewPager.setCurrentItem(position); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); }
Listo. Podemos observar el comportamiento de nuestra aplicación, donde al cambiar entre pestañas vemos el contenido de cada fragment. Podemos modificar éste contenido a lo que deseemos.
Puedes ver el resultado final aqui: Tabs y toolbars en Android: Resultado final