So programmieren Sie eine Navigationsleiste für eine Android-App

Was Sie erstellen werden

Das Material-Design-Team bei Google definiert die Funktionalität einer Navigationsleiste in Android wie folgt:

Die Navigationsleiste wird von links eingezogen und enthält die Navigationsziele für Ihre App.

Ein Beispiel für eine beliebte Android-App, die die Navigationsleiste implementiert, ist die Inbox-App von Google, die eine Navigationsleiste verwendet, um zu verschiedenen Abschnitten der Anwendung zu navigieren. Sie können es selbst prüfen, indem Sie die Inbox-App aus dem Google Play Store herunterladen, sofern Sie sie noch nicht auf Ihrem Gerät haben. Der folgende Screenshot zeigt den Posteingang mit geöffneter Navigationsleiste.

Der Benutzer kann die Navigationsleiste anzeigen, wenn er mit dem Finger vom linken Rand der Aktivität streicht. Sie können ihn auch aus der Home-Aktivität (der obersten Ebene der App) finden, indem Sie in der Aktionsleiste auf das App-Symbol (auch "Hamburger" -Menü) tippen. 

Wenn Sie viele verschiedene Ziele (z. B. mehr als sechs) in Ihrer App haben, wird empfohlen, eine Navigationsleiste zu verwenden. 

In diesem Beitrag erfahren Sie, wie Sie Navigationselemente in einer Navigationsleiste in Android anzeigen. Wir werden darüber sprechen, wie man das benutzt Schubladenlayout und Navigationsansicht API zur Durchführung dieser Aufgabe. Für einen Bonus erfahren Sie auch, wie Sie die Android Studio-Vorlagenfunktion verwenden, um Ihr Projekt schnell mit einer Navigationsleiste zu booten. 

Ein Beispielprojekt (in Kotlin) für dieses Lernprogramm finden Sie in unserem GitHub-Repo, sodass Sie es einfach mitverfolgen 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 benennen.) NavigationDrawerDemo) mit einer leeren Aktivität aufgerufen Hauptaktivität. Überprüfen Sie auch das Kotlin-Unterstützung einschließen Kontrollkästchen. 

2. Hinzufügen des DrawerLayout und der Navigationsansicht

Mit der Verwendung beginnen Schubladenlayout und Navigationsansicht In Ihrem Projekt müssen Sie die Designunterstützung und das Android-Support-Artefakt importieren. Fügen Sie diese also zu Ihren Modulen hinzu build.gradle Datei, um sie zu importieren. 

Abhängigkeiten Implementierung 'com.android.support:design:27.0.2' Implementierung 'com.android.support:support-v4:27.0.2'

Schließen Sie auch beide ein Schubladenlayout Widget und auch die Navigationsansicht Widget in Ihrem res / layout / activlty_main.xml Datei.

    

Hier haben wir eine erstellt Schubladenlayout Widget mit der ID drawer_layout. Das Werkzeuge: openDrawer Diese Eigenschaft wird verwendet, um die Navigationsleiste anzuzeigen, wenn das XML-Layout in der Designansicht von Android Studio geöffnet ist. 

Die offizielle Dokumentation sagt folgendes über Schubladenlayout:

Schubladenlayout fungiert als Container der obersten Ebene für Fensterinhalte, mit dem interaktive "Schubladen" -Ansichten aus einer oder beiden vertikalen Kanten des Fensters herausgezogen werden können.

Nach dem Hinzufügen der Schubladenlayout Widget, haben wir ein untergeordnetes Layout eingefügt, das auf zeigt @ layout / app_bar_main

Hier ist mein app_bar_main.xml Ressourcendatei. Diese Datei hat einfach eine KoordinatorLayout, ein AppBarLayout, und ein Werkzeugleiste Widget. 

     

Schließlich haben wir eine erstellt Navigationsansicht Widget. Die offizielle Dokumentation sagt folgendes über Navigationsansicht:

Navigationsansicht stellt ein Standardnavigationsmenü für die Anwendung dar. Der Menüinhalt kann mit einer Menüressourcendatei gefüllt werden.

In dem Navigationsansicht XML-Widget, Sie können sehen, dass wir ein hinzugefügt haben android: layout_gravity Attribut mit Wert Start. Dies wird verwendet, um die Schublade zu positionieren - Sie möchten, dass die Schublade von links oder rechts herauskommt (Anfang oder Ende bei Plattformversionen, die die Layoutrichtung unterstützen). In unserem eigenen Fall kommt die Schublade von links heraus. 

Wir haben auch eine app: headerLayout Attribut, auf das zeigt @ layout / nav_header_main. Dies wird eine hinzufügen Aussicht als Kopfzeile des Navigationsmenüs.

Hier ist mein nav_header_main.xml Layout-Ressourcendatei:

    

Diese Layoutdatei hat einfach eine LinearLayout, ein Bildansicht, und ein Textvorschau

Um die Menüelemente für die Navigationsleiste einzuschließen, können wir das Attribut verwenden App: Menü mit einem Wert, der auf eine Menüressourcendatei zeigt. 

 

Hier ist der res / menu / activity_main_drawer.xml Menü Ressourcendatei:

                 

Hier haben wir eine definiert Speisekarte Verwendung der

die als Container für Menüpunkte dient. Ein schafft ein MenuItem, was ein einzelnes Element in einem Menü darstellt.

Wir haben dann unsere erste Menügruppe mit der . EIN dient als unsichtbarer Container für Elemente-Menüpunkte in unserem Fall. Jedes von den  Elemente hat eine ID, ein Symbol und einen Titel. Beachten Sie, dass am Ende jeweils eine horizontale Linie gezeichnet wird für uns, wenn in der Navigationsleiste gezeigt. 

EIN kann auch ein verschachteltes enthalten 

 Um ein Untermenü zu erstellen, haben wir dies in unserem letzten Schritt getan . Beachten Sie, dass dies zuletzt hat eine Titeleigenschaft. 

Beachten Sie, dass wir beim Anzeigen der Navigationslistenelemente aus einer Menüressource eine verwenden könnten Listenansicht stattdessen. Indem Sie die Navigationsleiste mit einer Menüressource konfigurieren, erhalten Sie das Materialdesign kostenlos in der Navigationsleiste. Wenn Sie eine Listenansicht, Sie müssen die Liste pflegen und auch so anpassen, dass sie den empfohlenen Materialdesignspezifikationen für die Navigationsleiste entspricht. 

3. Initialisierung von Komponenten

Als nächstes werden wir Instanzen unseres initialisieren Schubladenlayout und ActionBarDrawerToggle. Die Initialisierung wird im Inneren stattfinden onCreate () im MainActivity.kt.

import android.content.res.Configuration import android.os.Bundle import android.support.v4.widget.DrawerLayout import android.support.v7.app.ActionBarDrawerToggle import android.support.v7.app.AppCompatActivity import android.support.v7 .widget.Toolbar import android.view.MenuItem-Klasse MainActivity: AppCompatActivity () privates lateinit var-Zeichenfach: DrawerLayout privates lateinit var toggle: ActionBarDrawerToggle-Überschreibung fun onCreate (savedInstanceState: Bundle?) super.onCont () .activity_main) val toolbar: Toolbar = findViewById (R.id.toolbar_main) setSupportActionBar (Symbolleiste) drawer = findViewById (R.id.drawer_layout) toggle = ActionBarDrawerToggle (this, Drawer, Toolbar, R.string.navigation_drawer). navigation_drawer_close) drawer.addDrawerListener (toggle) supportActionBar? .setDisplayHomeAsUpEnabled (true) supportActionBar? .setHomeButtonEnabled (true) //…

Das ActionBarDrawerToggle Richtet das App-Symbol auf der linken Seite der Aktionsleiste oder Symbolleiste ein, um die Navigationsleiste zu öffnen und zu schließen. Um eine Instanz von erstellen zu können ActionBarDrawerToggle, Wir müssen folgende Parameter angeben: 

  • ein übergeordneter Kontext - zum Beispiel in einem Aktivität Sie verwenden diese, während in einer Fragment du rufst an getActivity ()
  • eine Instanz der Schubladenlayout Widget zur Verknüpfung mit der Aktivität Aktionsleiste
  • Das Symbol, das auf dem App-Symbol platziert werden soll, um anzuzeigen, dass ein Umschalter vorhanden ist
  • die String-Ressourcen für die Öffnungs- bzw. Schließoperationen (für die Zugänglichkeit)

Wir haben die Methode aufgerufen addDrawerListener () auf einen Schubladenlayout um einen zu verbinden ActionBarDrawerToggle mit einer Schubladenlayout

Beachten Sie, dass wir auch das App-Symbol über aktivieren setHomeButtonEnabled () und aktivieren Sie diese für die Navigation nach oben setDisplayHomeAsUpEnabled ()

Wir leiten dann die onPostCreate (), onConfigurationChanged (), und onOptionsItemSelected () Aktivitätsrückrufmethoden für die Umschaltung:

Klasse MainActivity: AppCompatActivity () //… überschreibe fun onPostCreate (savedInstanceState: Bundle?) super.onPostCreate (savedInstanceState) toggle.syncState () überschreibt fun onConfigurationChanged (newConfig: Configuration?) super.onConfigurationCapton. onConfigurationChanged (newConfig) überschreibt fun onOptionsItemSelected (item: MenuItem?): Boolean if (toggle.onOptionsItemSelected (item)) return true return super.onOptionsItemSelected (item)

Hier ist was der syncState () laut offiziellen Unterlagen: 

Synchronisiert den Status des Schubladenkennzeichens / -preises mit dem verknüpften DrawerLayout… Dies sollte von Ihrem aufgerufen werden Aktivität's onPostCreate Methode, die synchronisiert werden soll, nachdem der Instanzstatus des DrawerLayout wiederhergestellt wurde, und zu einem anderen Zeitpunkt, zu dem der Status so auseinandergegangen ist, dass ActionBarDrawerToggle nicht benachrichtigt wurde. (Wenn Sie beispielsweise die Weiterleitung der entsprechenden Fachereignisse für einen bestimmten Zeitraum aufhören.)

4. Testen der App

An diesem Punkt können wir die App ausführen!

Wie Sie sehen, wird beim Starten der App in der Aktionsleiste das Symbol für die Navigationsleiste „Hamburger“ angezeigt. Tippen Sie auf dieses App-Symbol, um die Schublade zu öffnen. Wenn Sie auf die Elemente der Navigationsleiste klicken, wird auch nichts getan. Wir werden diesen Teil im nächsten Abschnitt behandeln. 

5. Behandlung von Click-Events

Sehen wir uns nun an, wie mit Klickereignissen für die einzelnen Elemente in der Navigationsleiste gearbeitet wird. Beachten Sie, dass Sie durch Klicken auf ein Element zu einer neuen Aktivität oder einem neuen Fragment gelangen sollten. Aus diesem Grund wird es als Navigationsleiste bezeichnet!

Zunächst muss Ihre Aktivität das implementieren NavigationView.OnNavigationItemSelectedListener

Klasse MainActivity: AppCompatActivity (), NavigationView.OnNavigationItemSelectedListener //…

Durch die Implementierung dieses Vertrags oder dieser Schnittstelle müssen wir nun die einzige Methode überschreiben: onNavigationItemSelected ()

Klasse MainActivity: AppCompatActivity (), NavigationView.OnNavigationItemSelectedListener //… überschreibe Fun onNavigationItemSelected (item: MenuItem): Boolean when (item.itemId) R.id.nav_item_one -> Toast.makeText (this, ". Toast.LENGTH_SHORT) .show () R.id.nav_item_two -> Toast.makeText (dieser "geklickte Punkt zwei", Toast.LENGTH_SHORT) .show () R.id.nav_item_three -> Toast.makeText (" Auf geklicktes Element drei ", Toast.LENGTH_SHORT) .show () R.id.nav_item_four -> Toast.makeText (dieses" geklickte Element vier ", Toast.LENGTH_SHORT) .show () return true

Diese Methode wird aufgerufen, wenn ein Element im Navigationsmenü ausgewählt wird. Wir haben das benutzt wann Ausdruck zum Ausführen verschiedener Aktionen basierend auf dem Menüelement, auf das geklickt wurde. Die Menüelement-IDs dienen als Konstanten für das wann Ausdruck. 

Als nächstes müssen wir unser initialisieren Navigationsansicht und setzen Sie diesen Listener hinein onCreate () unserer Tätigkeit. 

Klasse MainActivity: AppCompatActivity (), NavigationView.OnNavigationItemSelectedListener //… überschreibe Fun onCreate (savedInstanceState: Bundle?) //… val navigationView: navigationView = findViewById (R.id.nav_view) navigationView.setNavigationItemSelectedListener (in) //… 

Führen Sie das Projekt erneut aus!

Wenn Sie auf einige Elemente klicken, wird eine Toastnachricht angezeigt - genau wie wir es erwartet haben. Denken Sie jedoch daran, dass ein Klick auf ein Element den Benutzer zu einer neuen Aktivität oder einem neuen Fragment führen sollte (wir haben dies hier der Kürze halber ignoriert).. 

Sie werden feststellen, dass die Schublade beim Klicken auf ein Element weiterhin angezeigt wird. Es wäre besser, wenn er automatisch geschlossen würde, wenn auf ein Element geklickt wurde. Mal sehen, wie das geht. 

overnide fun onNavigationItemSelected (item: MenuItem): Boolean when (item.itemId) R.id.nav_item_one -> Toast.makeText (dies ist ein "geklicktes Element 1", Toast.LENGTH_SHORT) .show () R.id.nav_item_two -> Toast.makeText (dies ist "geklicktes Element zwei", Toast.LENGTH_SHORT) .show () R.id.nav_item_three -> Toast.makeText (dieses "geklicktes Element drei", Toast.LENGTH_SHORT) .show () R .id.nav_item_four -> Toast.makeText (dieses "geklickte Element vier", Toast.LENGTH_SHORT) .show () drawer.closeDrawer (GravityCompat.START) gibt true zurück.

Um die Schublade zu schließen, nachdem ein Link angeklickt wurde, rufen Sie einfach auf closeDrawer () auf einer Instanz von Schubladenlayout und weitergeben GravityCompat.START auf die Methode. 

Führen Sie das Projekt noch einmal aus und sehen Sie das Ergebnis! 

6. Handhabung der Zurück-Taste, die gedrückt wird

Wenn die Schublade geöffnet ist, ist es eine bessere Benutzererfahrung, die Aktivität zu Hause nicht zu schließen, wenn die Schublade geöffnet wird Zurück Taste wird gedrückt. So funktionieren beliebte Apps wie die Inbox-App von Google. 

Also, wenn die Schublade geöffnet ist und die Zurück Wenn Sie die Taste drücken, schließen Sie nur die Schublade anstelle der aktuellen Aktivität zu Hause. Wenn der Benutzer die Taste drückt Zurück Wenn Sie die Taste erneut drücken, sollte die Aktivität zu Hause geschlossen werden. 

So können wir das erreichen: 

override fun onBackPressed () if (drawer.isDrawerOpen (GravityCompat.START)) drawer.closeDrawer (GravityCompat.START) else super.onBackPressed ()

Führen Sie das Projekt erneut aus und testen Sie es! 

7. Bonus: Verwenden von Android Studio-Vorlagen

Nachdem Sie nun die APIs kennen gelernt haben, die zum Erstellen einer Navigationsleiste erforderlich sind, zeige ich Ihnen eine Verknüpfung, die das nächste Mal schneller machen wird. Sie können einfach eine Vorlage verwenden, anstatt eine Aktivität der Navigationsschublade von Grund auf neu zu programmieren. 

Android Studio bietet Codevorlagen, die den bewährten Vorgehensweisen von Android beim Design und der Entwicklung entsprechen. Diese vorhandenen Code-Vorlagen (verfügbar in Java und Kotlin) können Ihnen dabei helfen, Ihr Projekt schnell zu starten. Eine solche Vorlage kann verwendet werden, um eine Aktivität der Navigationsleiste zu erstellen. 

Ich zeige Ihnen, wie Sie diese praktische Funktion in Android Studio verwenden können. 

Starten Sie für ein neues Projekt Android Studio. 

Geben Sie den Anwendungsnamen ein und klicken Sie auf Nächster Taste. 

Sie können die Standardeinstellungen so belassen, wie sie im Ziel Android-Geräte Dialog. Drücke den Nächster Taste erneut. 

In dem Hinzufügen eine Aktivität für das Handy blättern Sie nach unten und wählen Sie Aktivität der Navigationsablage. Drücke den Nächster Taste danach. 

Im letzten Dialogfeld können Sie den Aktivitätsnamen, den Layoutnamen oder den Titel umbenennen, wenn Sie möchten. Zum Schluss klicken Sie auf Fertig Taste, um alle Konfigurationen zu akzeptieren. 

Android Studio hat uns jetzt dabei geholfen, ein Projekt mit einer Aktivität der Navigationsleiste zu erstellen. Wirklich cool!

Es wird dringend empfohlen, den generierten Code zu untersuchen. 

Sie können Vorlagen auch für ein bereits vorhandenes Android Studio-Projekt verwenden. Einfach auf gehen Datei> Neu> Aktivität> Aktivität der Navigationsleiste.  

Die im Lieferumfang von Android Studio enthaltenen Vorlagen eignen sich für einfache Layouts und für das Erstellen einfacher Apps. Wenn Sie Ihre App jedoch noch weiter vorantreiben möchten, sollten Sie einige der von Envato Market verfügbaren App-Vorlagen in Betracht ziehen. 

Sie sparen viel Zeit für erfahrene Entwickler und helfen ihnen, den Slog der Erstellung einer App von Grund auf zu durchbrechen und sich stattdessen auf die einzigartigen und angepassten Teile der Erstellung einer neuen App zu konzentrieren.

Fazit

In diesem Lernprogramm haben Sie gelernt, wie Sie mit Android eine Navigationsleiste erstellen Schubladenlayout und Navigationsansicht API von Grund auf neu. Wir haben auch untersucht, wie Sie mit den Android Studio-Vorlagen einfach und schnell eine Navigationsleiste erstellen können. 

Ich empfehle Ihnen dringend, die offiziellen Richtlinien für das Materialdesign für Navigationsschubladen zu lesen, um mehr darüber zu erfahren, wie Navigationsschubladen in Android richtig entworfen und verwendet werden.   

Weitere Informationen zum Codieren für Android finden Sie in Envato Tuts. Hier finden Sie einige unserer anderen Kurse und Tutorials+!