Cómo programar una barra de navegación inferior para una aplicación de Android
Spanish (Español) translation by CYC (you can also view the original English article)



El equipo de Material Design de Google define la funcionalidad de las barras de navegación inferiores en Android de la siguiente manera:
Las barras de navegación inferiores facilitan explorar y cambiar entre las vistas de nivel superior en un solo toque.
Al tocar en el icono de navegación inferior, accederás directamente a la vista asociada o actualizarás la vista actualmente activa.
De acuerdo con las pautas oficiales de Material Design para la barra de navegación inferior, se debe usar cuando tu aplicación tenga:
- De tres a cinco destinos de alto nivel
- Destinos que requieren acceso directo
Un ejemplo de una aplicación popular que implementa la barra de navegación inferior es la aplicación Google+ Android de Google, que lo usa para navegar a diferentes destinos de la aplicación. Puedes verlo tu mismo descargando la aplicación Google+ de la tienda Google Play (si todavía no la tienes en tu dispositivo). La siguiente captura de pantalla es de la aplicación de Google+ que muestra una barra de navegación inferior.



En esta publicación, aprenderás a mostrar los elementos del menú dentro de la barra de navegación inferior en Android. Utilizaremos la API BottomNavigationView para realizar la tarea. Para una bonificación adicional, también aprenderás a usar la función de plantillas de Android Studio para iniciar rápidamente tu proyecto con una barra de navegación inferior.
Puedes encontrar un proyecto de muestra (en Kotlin) para este tutorial en nuestro repositorio de GitHub para que puedas seguirlo fácilmente.
Requisitos previos
Para poder seguir este tutorial, necesitarás:
- Android Studio 3.0 o superior
- Plugin de Kotlin 1.1.51 o superior
1. Crear un proyecto en Android Studio
Ejecuta Android Studio y crea un nuevo proyecto (puedes llamarlo BottomNavigationDemo) con una actividad vacía llamada MainActivity. Asegúrate de marcar también la casilla de verificación Incluír el soporte de Kotlin.



2. Agregando el BottomNavigationView
Para comenzar a utilizar BottomNavigationView en tu proyecto, asegúrate de importar el soporte de diseño y también el artefacto de soporte de Android. Añádelos al archivo build.gradle de tu módulo para importarlos.
1 |
dependencies { |
2 |
implementation 'com.android.support:design:27.0.2' |
3 |
}
|
Además, visita tu archivo res/layout/activlty_main.xml para incluir el widget BottomNavigationView. Este archivo de diseño también incluye un RestraintLayout y un FrameLayout. Ten en cuenta que FrameLayout servirá como contenedor o marcador de posición para los diferentes fragmentos que se colocarán en él cada vez que se haga clic en un elemento del menú en la barra de navegación inferior. (Vamos a llegar a eso en breve).
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<android.support.constraint.ConstraintLayout
|
3 |
xmlns:android="https://schemas.android.com/apk/res/android" |
4 |
xmlns:app="http://schemas.android.com/apk/res-auto" |
5 |
xmlns:tools="http://schemas.android.com/tools" |
6 |
android:layout_width="match_parent" |
7 |
android:layout_height="match_parent" |
8 |
tools:context="com.chikeandroid.bottomnavigationdemo.MainActivity"> |
9 |
|
10 |
<FrameLayout
|
11 |
android:id="@+id/container" |
12 |
android:layout_width="match_parent" |
13 |
android:layout_height="match_parent" |
14 |
app:layout_behavior="@string/appbar_scrolling_view_behavior" /> |
15 |
|
16 |
<android.support.design.widget.BottomNavigationView
|
17 |
android:id="@+id/navigationView" |
18 |
android:layout_width="0dp" |
19 |
android:layout_height="wrap_content" |
20 |
android:layout_marginEnd="0dp" |
21 |
android:layout_marginStart="0dp" |
22 |
android:background="?android:attr/windowBackground" |
23 |
app:layout_constraintBottom_toBottomOf="parent" |
24 |
app:layout_constraintLeft_toLeftOf="parent" |
25 |
app:layout_constraintRight_toRightOf="parent" |
26 |
app:itemBackground="@color/colorPrimary" |
27 |
app:itemIconTint="@color/white" |
28 |
app:itemTextColor="@color/white" |
29 |
app:menu="@menu/navigation"/> |
30 |
|
31 |
</android.support.constraint.ConstraintLayout>
|
Aquí hemos creado un widget BottomNavigationView con el id navigationView. La documentación oficial dice que:
BottomNavigationView representa una barra de navegación inferior estándar para la aplicación. Es una implementación de material design para la navegación inferior.
Las barras de navegación inferiores facilitan a los usuarios explorar y cambiar entre las vistas de nivel superior en un solo toque. Se debe usar cuando la aplicación tiene entre tres y cinco destinos de nivel superior.
Los atributos importantes que debes tener en cuenta que se agregaron a nuestro BottomNavigationView son:
-
app:itemBackgroundeste atributo establece el fondo de nuestros elementos del menú para el recurso dado. En nuestro caso, simplemente le dimos un color de fondo. -
app:itemIconTintestablece el tinte que se aplica a los iconos de los elementos de nuestro menú. -
app:itemTextColorestablece los colores a usar para los diferentes estados (normal, seleccionado, enfocado, etc.) del texto del elemento de menú.
Para incluir los elementos del menú en la barra de navegación inferior, podemos usar atributo app:menu con un valor que apunta a un archivo de recursos de menú.
1 |
<android.support.design.widget.BottomNavigationView
|
2 |
app:menu="@menu/navigation"/> |
Aquí está el archivo de recurso del menú res/menu/navigation.xml:
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<menu xmlns:android="http://schemas.android.com/apk/res/android"> |
3 |
|
4 |
<item
|
5 |
android:id="@+id/navigation_songs" |
6 |
android:icon="@drawable/ic_music_note" |
7 |
android:title="Songs"/> |
8 |
|
9 |
<item
|
10 |
android:id="@+id/navigation_albums" |
11 |
android:icon="@drawable/ic_album" |
12 |
android:title="Albums"/> |
13 |
|
14 |
<item
|
15 |
android:id="@+id/navigation_artists" |
16 |
android:icon="@drawable/ic_person" |
17 |
android:title="Artists"/> |
18 |
|
19 |
</menu>
|
Aquí hemos definido un Menu usando la etiqueta <menu> que sirve como un contenedor para los elementos <item> del menú. Un crea un MenuItem, que representa un solo elemento en un menú. Como puedes ver, cada <item> tiene una identificación, un ícono y un título.
3. Inicialización de componentes
Ahora, vamos a inicializar una instancia de BottomNavigationView. La inicialización ocurrirá dentro de onCreate() en MainActivity.kt.
1 |
import android.os.Bundle |
2 |
import android.support.design.widget.BottomNavigationView |
3 |
import android.support.v7.app.AppCompatActivity |
4 |
|
5 |
class MainActivity : AppCompatActivity() { |
6 |
|
7 |
lateinit var toolbar: ActionBar |
8 |
|
9 |
override fun onCreate(savedInstanceState: Bundle?) { |
10 |
super.onCreate(savedInstanceState) |
11 |
setContentView(R.layout.activity_main) |
12 |
|
13 |
toolbar = supportActionBar!! |
14 |
val bottomNavigation: BottomNavigationView = findViewById(R.id.navigationView) |
15 |
}
|
16 |
}
|
4. Probando la aplicación
¡Ahora podemos ejecutar la aplicación!



Como puedes ver, nuestra barra de navegación se muestra en la parte inferior de la pantalla de la aplicación. No sucederá nada si haces clic en cualquiera de los elementos de navegación que hay allí; vamos a manejar esa parte en la siguiente sección.
5. Configuración de los eventos clic
Ahora, veamos cómo configurar los eventos clic para cada uno de los elementos en la barra de navegación inferior. Recuerda que al hacer clic en cualquier elemento de allí debe llevar al usuario a un nuevo destino en la aplicación.
1 |
// ...
|
2 |
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> |
3 |
when (item.itemId) { |
4 |
R.id.navigation_songs -> { |
5 |
|
6 |
return@OnNavigationItemSelectedListener true |
7 |
}
|
8 |
R.id.navigation_albums -> { |
9 |
|
10 |
return@OnNavigationItemSelectedListener true |
11 |
}
|
12 |
R.id.navigation_artists -> { |
13 |
|
14 |
return@OnNavigationItemSelectedListener true |
15 |
}
|
16 |
}
|
17 |
false
|
18 |
}
|
19 |
|
20 |
override fun onCreate(savedInstanceState: Bundle?) { |
21 |
// ...
|
22 |
bottomNavigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) |
23 |
}
|
24 |
// ...
|
Aquí llamamos al método setOnNavigationItemSelectedListener. Esto es lo que hace según la documentación oficial:
Establece un receptor que recibirá una notificación cuando se seleccione un elemento de navegación inferior.
Utilizamos la expresión when para realizar diferentes acciones en función del elemento del menú en el que se hizo clic, los ids del elemento de menú sirven como constantes para la expresión when. Al final de cada when, devolvemos true.
Luego pasamos nuestro receptor mOnNavigationItemSelectedListener a setOnNavigationItemSelectedListener() como argumento.
Ten en cuenta que hay otro método similar llamado setOnNavigationItemReselectedListener, que recibirá una notificación cuando se vuelva a seleccionar el elemento de navegación inferior seleccionado actualmente.
A continuación, vamos a crear las diferentes páginas (o Fragmentos) para cada uno de los elementos del menú en el panel de navegación, de modo que cuando se haga clic o se toque un elemento del menú, se muestre un Fragmento o página de Android diferente.
6. Creando los Fragmentos (Páginas)
Comenzaremos con la clase SongsFragment.kt, y debes seguir un proceso similar para las dos clases de fragmentos restantes: AlbumsFragment.kt y ArtistsFragment.kt.
Aquí está mi SongsFragment.kt:
1 |
import android.os.Bundle |
2 |
import android.support.v4.app.Fragment |
3 |
import android.view.LayoutInflater |
4 |
import android.view.View |
5 |
import android.view.ViewGroup |
6 |
|
7 |
class SongsFragment : Fragment() { |
8 |
|
9 |
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = |
10 |
inflater.inflate(R.layout.fragment_songs, container, false) |
11 |
|
12 |
companion object { |
13 |
fun newInstance(): SongsFragment = SongsFragment() |
14 |
}
|
15 |
}
|
También, aquí está mi R.layout.fragment_songs:
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
3 |
android:layout_width="match_parent" |
4 |
android:layout_height="match_parent" |
5 |
android:orientation="vertical"> |
6 |
|
7 |
<TextView
|
8 |
android:layout_width="match_parent" |
9 |
android:layout_height="match_parent" |
10 |
android:text="Songs" |
11 |
android:gravity="center_vertical|center_horizontal"/> |
12 |
|
13 |
</LinearLayout>
|
7. Lanzar los fragmentos
Cuando se hace clic en cualquiera de los elementos del menú, abrimos el Fragmento correspondiente y también cambiamos el título de la barra de acciones.
1 |
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> |
2 |
when (item.itemId) { |
3 |
R.id.navigation_songs -> { |
4 |
toolbar.title = "Songs" |
5 |
val songsFragment = SongsFragment.newInstance() |
6 |
openFragment(songsFragment) |
7 |
return@OnNavigationItemSelectedListener true |
8 |
}
|
9 |
R.id.navigation_albums -> { |
10 |
toolbar.title = "Albums" |
11 |
val albumsFragment = AlbumsFragment.newInstance() |
12 |
openFragment(albumsFragment) |
13 |
return@OnNavigationItemSelectedListener true |
14 |
}
|
15 |
R.id.navigation_artists -> { |
16 |
toolbar.title = "Artists" |
17 |
val artistsFragment = ArtistsFragment.newInstance() |
18 |
openFragment(artistsFragment) |
19 |
return@OnNavigationItemSelectedListener true |
20 |
}
|
21 |
}
|
22 |
false
|
23 |
}
|
24 |
|
25 |
private fun openFragment(fragment: Fragment) { |
26 |
val transaction = supportFragmentManager.beginTransaction() |
27 |
transaction.replace(R.id.container, fragment) |
28 |
transaction.addToBackStack(null) |
29 |
transaction.commit() |
30 |
}
|
Aquí estamos usando un método llamado openFragment() que simplemente usa FragmentTransaction para agregar nuestro fragmento a la UI.
¡Ahora ejecuta el proyecto nuevamente para ver cómo funciona todo!



Cada vez que hagas clic en cualquier elemento del menú, llevarás al usuario a un nuevo Fragmento.
Ten en cuenta que cuando tenemos más de cuatro elementos de menú en la barra de navegación inferior, es decir. en BottomNavigationView, entonces el sistema Android automáticamente habilita el modo de cambio. En este modo, cuando se hace clic en cualquiera de los elementos del menú, los demás elementos a la derecha o a la izquierda del elemento cliqueado se desplazan.



8. Bonificación: usando las plantillas de Android Studio
Ahora que ya aprendiste sobre las API involucradas para crear una barra de navegación inferior desde cero en Android, te mostraré un atajo que te ayudará la próxima vez. Simplemente puedes usar una plantilla en lugar de codificar una barra de navegación desde cero.
Android Studio proporciona plantillas de código que siguen las mejores prácticas de diseño y desarrollo de Android. Estas plantillas de códigos existentes (disponibles en Java y Kotlin) pueden ayudarte a poner en marcha rápidamente tu proyecto. Una de esas plantillas se puede usar para crear una barra de navegación inferior.
Para utilizar esta práctica función para un nuevo proyecto, primero inicia Android Studio.



Ingresa el nombre de la aplicación y haz clic en el botón Siguiente. Puedes dejar los valores predeterminados tal como están en el cuadro de diálogo Target Android Devices.
Haz clic en el botón Siguiente nuevamente.



En el cuadro de diálogo Agregar una actividad al dispositivo móvil, selecciona Actividad de navegación inferior. Haz clic en el botón Siguiente nuevamente después de eso.



En el último cuadro de diálogo, puedes cambiar el nombre de la Actividad o cambiar su nombre o título de diseño si lo deseas. Finalmente, haz clic en el botón Finalizar para aceptar todas las configuraciones.
Android Studio ahora nos ha ayudado a crear un proyecto con una actividad de navegación inferior. ¡Realmente genial!
Se recomienda encarecidamente explorar el código generado.
En un proyecto existente de Android Studio, para usar esta plantilla, simplemente ve a Archivo > Nuevo > Actividad > Actividad de navegación inferior.



Ten en cuenta que las plantillas que vienen incluidas con Android Studio son buenas para diseños simples y para hacer aplicaciones básicas, pero si realmente quieres poner en marcha tu aplicación, puedes considerar algunas de las plantillas de aplicaciones disponibles en Envato Market.
Son un gran ahorro de tiempo para desarrolladores experimentados, ayudándoles a superar el reto de crear una aplicación desde cero y enfocar sus talentos en las partes únicas y personalizadas de la creación de una nueva aplicación.
Conclusión
En este tutorial, aprendiste a crear una barra de navegación inferior en Android utilizando la API BottomNavigationView desde cero. También exploramos cómo usar fácil y rápidamente las plantillas de Android Studio para crear una actividad de navegación inferior.
Recomiendo consultar las directrices oficiales de Material Design para la barra de navegación inferior y así obtener más información sobre cómo diseñar y usar correctamente la barra de navegación inferior en Android.
Para obtener más información sobre la programación en Android, consulta algunos de nuestros otros cursos y tutoriales aquí en Envato Tuts +.


Android SDKCrea una aplicación de música con una plantilla de aplicación de AndroidChike Mgbemena

Plantillas para Apps15 mejores plantillas para aplicaciones Android de 2017Nona Blackman

Android SDKAndroid desde adentro: Usando APIs RESTAshraff Hathibelagal

Android SDKCómo programar una caja de navegación para una aplicación AndroidChike Mgbemena

KotlinKotlin desde adentro: Más divertido con funcionesChike Mgbemena



