So codieren Sie eine untere Navigationsleiste für eine Android-App
() translation by (you can also view the original English article)



Das Materialdesign-Team von Google definiert die Funktionalität der unteren Navigationsleisten in Android wie folgt:
Die unteren Navigationsleisten erleichtern das Erkunden und Wechseln zwischen den Ansichten der obersten Ebene mit einem einzigen Fingertipp.
Durch Tippen auf ein unteres Navigationssymbol gelangen Sie direkt zur zugehörigen Ansicht oder aktualisieren die aktuell aktive Ansicht.
Gemäß den offiziellen Materialdesign-Richtlinien für die untere Navigationsleiste sollte diese verwendet werden, wenn Ihre App über Folgendes verfügt:
- drei bis fünf Top-Level-Destinationen
- Ziele, die einen direkten Zugang erfordern
Ein Beispiel für eine beliebte App, die die untere Navigationsleiste implementiert, ist die Google+ Android App von Google, die damit zu verschiedenen Zielen der App navigiert. Sie können dies selbst sehen, indem Sie die Google+ App aus dem Google Play Store herunterladen (falls Sie sie noch nicht auf Ihrem Gerät haben). Der folgende Screenshot stammt aus der Google+ App und zeigt eine untere Navigationsleiste an.



In diesem Beitrag erfahren Sie, wie Sie Menüelemente in einer unteren Navigationsleiste in Android anzeigen. Wir verwenden die BottomNavigationView
-API, um die Aufgabe auszuführen. Als zusätzlichen Bonus erfahren Sie auch, wie Sie die Android Studio-Vorlagenfunktion verwenden, um Ihr Projekt mit einer unteren Navigationsleiste schnell zu booten.
Ein Beispielprojekt (in Kotlin) für dieses Tutorial finden Sie in unserem GitHub-Repository, damit Sie es leicht verfolgen können.
Voraussetzungen
Um diesem Tutorial folgen zu können, benötigen Sie:
- Android Studio 3.0 oder höher
- Kotlin-Plugin 1.1.51 oder höher
1. Erstellen Sie ein Android Studio-Projekt
Starten Sie Android Studio und erstellen Sie ein neues Projekt (Sie können es BottomNavigationDemo
nennen) mit einer leeren Aktivität namens MainActivity
. Stellen Sie sicher, dass Sie auch das Kontrollkästchen Kotlin-Unterstützung einschließen aktivieren.



2. Hinzufügen der BottomNavigationView
Um BottomNavigationView
in Ihrem Projekt zu verwenden, müssen Sie die Designunterstützung und auch das Android-Unterstützungsartefakt importieren. Fügen Sie diese der Datei build.gradle Ihres Moduls hinzu, um sie zu importieren.
1 |
dependencies { |
2 |
implementation 'com.android.support:design:27.0.2' |
3 |
}
|
Besuchen Sie auch Ihre Datei res/layout/activlty_main.xml, um das BottomNavigationView
-Widget einzuschließen. Diese Layoutdatei enthält auch ein ConstraintLayout
und ein FrameLayout
. Beachten Sie, dass das FrameLayout
als Container oder Platzhalter für die verschiedenen Fragmente dient, die darauf platziert werden, wenn auf ein Menüelement in der unteren Navigationsleiste geklickt wird. (Dazu kommen wir gleich.)
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>
|
Hier haben wir ein BottomNavigationView
-Widget mit der ID navigationView
erstellt. In der offiziellen Dokumentation heißt es:
BottomNavigationView
stellt eine standardmäßige untere Navigationsleiste für die Anwendung dar. Es ist eine Implementierung der unteren Navigation des Materialdesigns.
Die unteren Navigationsleisten erleichtern es Benutzern, mit einem einzigen Fingertipp zwischen den Ansichten der obersten Ebene zu navigieren und zwischen ihnen zu wechseln. Es sollte verwendet werden, wenn die Anwendung drei bis fünf Ziele auf oberster Ebene hat.
Die wichtigen Attribute, die Sie beachten sollten, die unserer BottomNavigationView
hinzugefügt wurden, sind:
-
app:itemBackground
: Dieses Attribut setzt den Hintergrund unserer Menüpunkte auf die angegebene Ressource. In unserem Fall haben wir ihm nur eine Hintergrundfarbe gegeben. -
app:itemIconTint
: legt den Farbton fest, der auf die Icons unserer Menüpunkte angewendet wird. -
app:itemTextColor
: legt die Farben fest, die für die verschiedenen Zustände (normal, ausgewählt, fokussiert usw.) des Menüeintragstexts verwendet werden sollen.
Um die Menüelemente für die untere Navigationsleiste einzuschließen, können wir das Attribut app:menu
mit einem Wert verwenden, der auf eine Menüressourcendatei verweist.
1 |
<android.support.design.widget.BottomNavigationView
|
2 |
app:menu="@menu/navigation"/> |
Hier ist die Menüressourcendatei 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>
|
Hier haben wir ein Menu
mit dem <menu>
definiert, das als Container für Menüpunkte dient. Ein <item>
erstellt ein MenuItem
, das ein einzelnes Element in einem Menü darstellt. Wie Sie sehen, hat jedes <item>
eine ID, ein Symbol und einen Titel.
3. Initialisierung von Komponenten
Als Nächstes initialisieren wir eine Instanz von BottomNavigationView
. Die Initialisierung erfolgt in onCreate()
in 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. Testen der App
Jetzt können wir die App ausführen!



Wie Sie sehen können, wird unsere untere Navigationsleiste am unteren Rand des App-Bildschirms angezeigt. Wenn Sie dort auf eines der Navigationselemente klicken, passiert nichts – wir werden diesen Teil im nächsten Abschnitt behandeln.
5. Konfigurieren von Klickereignissen
Sehen wir uns nun an, wie Sie Klickereignisse für jedes der Elemente in der unteren Navigationsleiste konfigurieren. Denken Sie daran, dass das Klicken auf ein Element darin den Benutzer zu einem neuen Ziel in der App führen sollte.
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 |
// ...
|
Hier haben wir die Methode setOnNavigationItemSelectedListener
aufgerufen. Hier ist, was es laut der offiziellen Dokumentation tut:
Legen Sie einen Listener fest, der benachrichtigt wird, wenn ein unteres Navigationselement ausgewählt wird.
Wir haben den when
-Ausdruck verwendet, um basierend auf dem angeklickten Menüelement verschiedene Aktionen auszuführen – die Menüelement-IDs dienen als Konstanten für den when
-Ausdruck. Am Ende jeder when
-Verzweigung geben wir true
zurück.
Anschließend übergeben wir unseren mOnNavigationItemSelectedListener
-Listener als Argument an setOnNavigationItemSelectedListener()
.
Beachten Sie, dass es eine weitere ähnliche Methode namens setOnNavigationItemReselectedListener
gibt, die benachrichtigt wird, wenn das aktuell ausgewählte untere Navigationselement erneut ausgewählt wird.
Als Nächstes erstellen wir die verschiedenen Seiten (oder Fragmente) für jedes der Menüelemente in der Navigationsleiste, sodass beim Klicken oder Tippen auf ein Menüelement ein anderes Android-Fragment oder eine andere Seite angezeigt wird.
6. Erstellen der Fragmente (Seiten)
Wir beginnen mit der SongsFragment.kt-Klasse, und Sie sollten für die verbleibenden zwei Fragmentklassen – AlbumsFragment.kt und ArtistsFragment.kt – ähnlich vorgehen.
Hier ist mein 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 |
}
|
Hier ist auch mein 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. Starten der Fragmente
Wenn auf einen der Menüpunkte geklickt wird, öffnen wir das entsprechende Fragment und ändern auch den Titel der Aktionsleiste.
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 |
}
|
Hier verwenden wir eine Methode namens openFragment()
, die einfach die FragmentTransaction
verwendet, um unser Fragment zur Benutzeroberfläche hinzuzufügen.
Führen Sie nun das Projekt erneut aus, um zu sehen, wie alles funktioniert!



Jedes Mal, wenn Sie auf ein Menüelement klicken, wird der Benutzer zu einem neuen Fragment weitergeleitet.
Beachten Sie, dass bei mehr als vier Menüpunkten in der unteren Navigationsleiste – d. h. in BottomNavigationView
– dann aktiviert das Android-System automatisch den Shift-Modus. Wenn in diesem Modus auf eines der Menüelemente geklickt wird, werden die anderen Elemente rechts oder links des angeklickten Elements verschoben.



8. Bonus: Verwenden von Android Studio-Vorlagen
Nachdem Sie nun die erforderlichen APIs kennengelernt haben, um eine untere Navigationsleiste in Android von Grund auf neu zu erstellen, zeige ich Ihnen eine Verknüpfung, die es beim nächsten Mal schneller macht. Sie können einfach eine Vorlage verwenden, anstatt eine Navigationsleiste von Grund auf neu zu programmieren.
Android Studio bietet Codevorlagen, die den Best Practices für Android-Design und -Entwicklung entsprechen. Diese vorhandenen Codevorlagen (verfügbar in Java und Kotlin) können Ihnen helfen, Ihr Projekt schnell zu starten. Eine solche Vorlage kann verwendet werden, um eine untere Navigationsleiste zu erstellen.
Um diese praktische Funktion für ein neues Projekt zu verwenden, starten Sie zuerst Android Studio.



Geben Sie den Anwendungsnamen ein und klicken Sie auf die Schaltfläche Weiter. Sie können die Standardeinstellungen im Dialogfeld Android-Zielgeräte unverändert belassen.
Klicken Sie erneut auf die Schaltfläche Weiter.



Wählen Sie im Dialogfeld Aktivität zu Mobile hinzufügen die Option Bottom-Navigation-Aktivität. Klicken Sie danach erneut auf die Schaltfläche Weiter.



Im letzten Dialog können Sie die Aktivität umbenennen oder ihren Layoutnamen oder Titel ändern, wenn Sie möchten. Klicken Sie abschließend auf die Schaltfläche Fertig stellen, um alle Konfigurationen zu akzeptieren.
Android Studio hat uns jetzt geholfen, ein Projekt mit einer unteren Navigationsaktivität zu erstellen. Wirklich cool!
Es wird dringend empfohlen, den generierten Code zu erkunden.
Um diese Vorlage in einem vorhandenen Android Studio-Projekt zu verwenden, gehen Sie einfach zu Datei > Neu > Aktivität > Aktivität für die untere Navigation.



Beachten Sie, dass die in Android Studio enthaltenen Vorlagen gut für einfache Layouts und die Erstellung einfacher Apps geeignet sind. Wenn Sie jedoch Ihre App wirklich in Schwung bringen möchten, sollten Sie einige der App-Vorlagen in Betracht ziehen, die von Envato Market erhältlich sind.
Sie sind eine enorme Zeitersparnis für erfahrene Entwickler, da sie ihnen helfen, den Aufwand für die Erstellung einer App von Grund auf zu überwinden und ihre Talente stattdessen auf die einzigartigen und angepassten Teile der Erstellung einer neuen App zu konzentrieren.
Abschluss
In diesem Tutorial haben Sie gelernt, wie Sie eine untere Navigationsleiste in Android mit der BottomNavigationView
-API von Grund auf neu erstellen. Wir haben auch untersucht, wie Sie die Android Studio-Vorlagen einfach und schnell verwenden können, um eine Aktivität für die untere Navigation zu erstellen.
Ich empfehle dringend, die offiziellen Richtlinien zum Materialdesign für die untere Navigationsleiste zu lesen, um mehr darüber zu erfahren, wie Sie die untere Navigationsleiste in Android richtig gestalten und verwenden.
Um mehr über das Programmieren für Android zu erfahren, sehen Sie sich einige unserer anderen Kurse und Tutorials hier auf Envato Tuts+ an!
- Android SDKErstellen Sie eine Musik-App mit einer Android-App-VorlageChike Mgbemena
- App-VorlagenDie 15 besten Android-App-Vorlagen von 2017Nona Blackman
- Android SDKAndroid von Grund auf neu: REST-APIs verwendenAshraff Hathibelagal
- Android SDKSo codieren Sie eine Navigationsleiste für eine Android-AppChike Mgbemena
- KotlinKotlin von Grund auf: Mehr Spaß mit FunktionenChike Mgbemena