Het materiaalontwerpteam bij Google definieert de functionaliteit van onderste navigatiebalken in Android als volgt:
Onderste navigatiebalken maken het gemakkelijk om te verkennen en schakelen tussen weergaven op het hoogste niveau in een enkele tik.
Tik op een onderste navigatiepictogram om direct naar de bijbehorende weergave te gaan of de huidige actieve weergave te vernieuwen.
Volgens de officiële richtlijnen voor materiaalontwerp voor de onderste navigatiebalk, moet deze worden gebruikt wanneer uw app:
Een voorbeeld van een populaire app die de onderste navigatiebalk implementeert, is de Google+ Android-app van Google, die deze gebruikt om naar verschillende bestemmingen van de app te navigeren. U kunt dit zelf bekijken door de Google+ app te downloaden van de Google Play Store (als u deze nog niet op uw apparaat heeft). De volgende schermafbeelding is afkomstig van de Google+ app met een navigatiebalk onderaan.
In dit bericht leert u hoe u menu-items in een onderste navigatiebalk in Android kunt weergeven. We zullen de gebruiken BottomNavigationView
API om de taak uit te voeren. Voor een extra bonus, leert u ook hoe u de sjablooneigenschap van Android Studio gebruikt om uw project snel op te starten met een navigatiebalk onderaan.
Een voorbeeldproject (in Kotlin) voor deze tutorial is te vinden op onze GitHub repo, zodat je gemakkelijk kunt volgen.
Als je deze zelfstudie wilt kunnen volgen, heb je het volgende nodig:
Start Android Studio en maak een nieuw project (u kunt het een naam geven BottomNavigationDemo
) met een lege activiteit genaamd Hoofdactiviteit
. Zorg ervoor dat u ook de Inclusief Kotlin-ondersteuning selectievakje.
Om te beginnen met gebruiken BottomNavigationView
in uw project moet u de ontwerpondersteuning en ook het ondersteuningsartefact van Android importeren. Voeg deze toe aan uw modules build.gradle bestand om ze te importeren.
afhankelijkheden implementatie 'com.android.support:design:27.0.2'
Bezoek ook jouw res / lay-out / activlty_main.xml bestand om de BottomNavigationView
widget. Dit lay-outbestand bevat ook een ConstraintLayout
en een FrameLayout
. Merk op dat de FrameLayout
zal dienen als een container of placeholder voor de verschillende fragmenten die erop worden geplaatst wanneer een menu-item wordt geklikt in de onderste navigatiebalk. (We komen daar binnenkort op terug.)
Hier hebben we een gemaakt BottomNavigationView
widget met de ID navigationView
. De officiële documentatie zegt dat:
BottomNavigationView
vertegenwoordigt een standaard onderste navigatiebalk voor toepassing. Het is een implementatie van bottom-navigatie van het materiaalontwerp.
Onderste navigatiebalken maken het gemakkelijk voor gebruikers om met één tik te verkennen en te schakelen tussen weergaven op het hoogste niveau. Het moet worden gebruikt als de applicatie drie tot vijf bestemmingen op het hoogste niveau heeft.
De belangrijke attributen waaraan u aandacht moet schenken, zijn toegevoegd aan onze BottomNavigationView
zijn:
app: itemBackground
: dit attribuut zet de achtergrond van onze menu-items op de gegeven bron. In ons geval hebben we het gewoon een achtergrondkleur gegeven. app: itemIconTint
: stelt de tint in die wordt toegepast op de pictogrammen van onze menu-items.app: itemTextColor
: stelt de kleuren in die moeten worden gebruikt voor de verschillende statussen (normaal, geselecteerd, gericht, etc.) van de tekst van het menu-item.Om de menu-items voor de onderste navigatiebalk op te nemen, kunnen we het attribuut gebruiken app: menu
met een waarde die naar een menuresourcebestand verwijst.
Hier is de res / menu / navigation.xml menubronbestand:
Hier hebben we een gedefinieerd Menu
de ... gebruiken die dient als een container voor menu-items. Een
creëert een Menu onderdeel
, die een enkel item in een menu vertegenwoordigt. Zoals je kunt zien, elk
heeft een id, een pictogram en een titel.
Vervolgens gaan we een instantie van initialiseren BottomNavigationView
. Initialisatie zal binnen gebeuren onCreate ()
in MainActivity.kt.
import android.os.Bundle import android.support.design.widget.BottomNavigationView import android.support.v7.app.AppCompatActivity class MainActivity: AppCompatActivity () lateinit var werkbalk: ActionBar override fun onCreate (savedInstanceState: Bundle?) super. onCreate (savedInstanceState) setContentView (R.layout.activity_main) werkbalk = supportActionBar !! val bottomNavigation: BottomNavigationView = findViewById (R.id.navigationView)
Nu kunnen we de app uitvoeren!
Zoals u kunt zien, wordt onze onderste navigatiebalk onder aan het app-scherm weergegeven. Er gebeurt niets als u op een van de navigatie-items klikt - we gaan dat deel in de volgende sectie behandelen.
Laten we nu eens kijken hoe we klikgebeurtenissen configureren voor elk item in de navigatiebalk onderaan. Vergeet niet dat als u op een item in de app klikt, de gebruiker naar een nieuwe bestemming in de app moet gaan.
// ... private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener item -> when (item.itemId) R.id.navigation_songs -> return @ OnNavigationItemSelectedListener true R.id.navigation_albums -> return @ OnNavigationItemSelectedListener true R.id .navigation_artists -> return @ OnNavigationItemSelectedListener true false override fun onCreate (savedInstanceState: Bundle?) // ... bottomNavigation.setOnNavigationItemSelectedListener (mOnNavigationItemSelectedListener) // ...
Hier hebben we de methode genoemd setOnNavigationItemSelectedListener
. Dit is wat het doet volgens de officiële documentatie:
Stel een listener in die op de hoogte wordt gebracht wanneer een navigatie-item aan de onderkant is geselecteerd.
We gebruikten de wanneer
expressie om verschillende acties uit te voeren op basis van het menu-item waarop werd geklikt - de menu-item-id's dienen als constanten voor de wanneer
uitdrukking. Aan het einde van elk wanneer
tak, keren we terug waar
.
We passeren dan onze mOnNavigationItemSelectedListener
luisteraar setOnNavigationItemSelectedListener ()
als een argument.
Houd er rekening mee dat er een andere soortgelijke methode wordt genoemd setOnNavigationItemReselectedListener
, die op de hoogte wordt gebracht wanneer het momenteel geselecteerde onderste navigatie-item opnieuw wordt geselecteerd.
Vervolgens gaan we de verschillende pagina's (of fragmenten) maken voor elk van de menu-items in de navigatielade, zodat wanneer op een menu-item wordt geklikt of er op wordt getikt, het een ander Android-fragment of een andere pagina weergeeft..
We beginnen met de SongsFragment.kt klasse, en u moet een vergelijkbaar proces volgen voor de resterende twee fragmentklassen-AlbumsFragment.kt en ArtistsFragment.kt.
Hier is mijn SongsFragment.kt:
import android.os.Bundle importeren android.support.v4.app.Fragment importeren android.view.LayoutInflater importeren android.view.View importeren android.view.ViewGroup class SongsFragment: Fragment () override fun onCreateView (inflater: LayoutInflater, container : ViewGroup ?, savedInstanceState: Bundle?): View? = inflater.inflate (R.layout.fragment_songs, container, false) begeleidende object fun newInstance (): SongsFragment = SongsFragment ()
Ook hier is mijn R.layout.fragment_songs
:
Wanneer op een van de menu-items wordt geklikt, openen we het bijbehorende fragment en wijzigen we ook de titel van de actiebalk.
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener item -> when (item.itemId) R.id.navigation_songs -> toolbar.title = "Songs" val songsFragment = SongsFragment.newInstance () openFragment (songsFragment) return @ OnNavigationItemSelectedListener true R.id.navigation_albums -> toolbar.title = "Albums" val albumsFragment = AlbumsFragment.newInstance () openFragment (albumsFragment) return @ OnNavigationItemSelectedListener true R.id.navigation_artists -> workbar.title = "Artiesten" val artistsFragment = ArtistsFragment.newInstance () openFragment (artistsFragment) return @ OnNavigationItemSelectedListener true false private fun openFragment (fragment: Fragment) val transaction = supportFragmentManager.beginTransaction () transaction.replace (R.id.container, fragment) transaction.addToBackStack ( null) transaction.commit ()
Hier gebruiken we een methode genaamd openFragment ()
die gewoon de FragmentTransaction
om ons fragment toe te voegen aan de gebruikersinterface.
Voer het project opnieuw uit om te zien hoe het allemaal werkt!
Telkens wanneer u op een menu-item klikt, wordt de gebruiker naar een nieuw fragment geleid.
Merk op dat wanneer we meer dan vier menu-items hebben in de onderste navigatiebalk, d.w.z. in BottomNavigationView
-dan schakelt het Android-systeem automatisch de schakelmodus in. In deze modus, wanneer op een van de menu-items wordt geklikt, worden de andere items aan de linker- of rechterkant van het aangeklikte item verschoven.
Nu je hebt geleerd over de betrokken API's om vanuit Android een bottom-navigatiebalk helemaal zelf te maken, laat ik je een snelkoppeling zien die hem de volgende keer sneller maakt. U kunt eenvoudig een sjabloon gebruiken in plaats van een navigatiebalk vanuit het niets te coderen.
Android Studio biedt codesjablonen die de best practices voor het ontwerpen en ontwikkelen van Android volgen. Deze bestaande codesjablonen (beschikbaar in Java en Kotlin) kunnen u helpen bij het snel opstarten van uw project. Eén zo'n sjabloon kan worden gebruikt om een onderste navigatiebalk te maken.
Als u deze handige functie voor een nieuw project wilt gebruiken, start u eerst Android Studio.
Voer de naam van de toepassing in en klik op de volgende knop. U kunt de standaardinstellingen laten zoals ze zijn in de Target Android-apparaten dialoog.
Klik op de volgende knop opnieuw.
In de Toevoegen een activiteit naar mobiel dialoogvenster, selecteer Bottom Navigation Activity. Klik op de volgende knop daarna opnieuw.
In het laatste dialoogvenster kunt u de activiteit hernoemen of de lay-outnaam of titel wijzigen als u dat wilt. Klik ten slotte op Af hebben om alle configuraties te accepteren.
Android Studio heeft ons nu geholpen bij het maken van een project met een bottom-navigatie-activiteit. Echt cool!
U wordt dringend geadviseerd om de gegenereerde code te verkennen.
Als u in een bestaand Android Studio-project deze sjabloon wilt gebruiken, gaat u gewoon naar Bestand> Nieuw> Activiteit> Onderste navigatie-activiteit.
Houd er rekening mee dat de sjablonen die bij Android Studio worden meegeleverd, goed zijn voor eenvoudige lay-outs en het maken van eenvoudige apps, maar als u uw app echt wilt starten, kunt u enkele app-sjablonen overwegen die verkrijgbaar zijn bij Envato Market..
Ze zijn een enorme tijdbesparing voor ervaren ontwikkelaars, waardoor ze de hele klus van het maken van een nieuwe app kunnen doorbreken en hun talenten kunnen richten op de unieke en aangepaste onderdelen van het maken van een nieuwe app.
In deze zelfstudie leer je hoe je een onderste navigatiebalk in Android maakt met behulp van de BottomNavigationView
API helemaal opnieuw. We hebben ook onderzocht hoe je de Android Studio-sjablonen eenvoudig en snel kunt gebruiken om een navigatie-activiteit op de bodem te maken.
Ik raad ten zeerste aan om de officiële richtlijnen voor materiaalontwerp voor de navigatiebalk onderin te lezen voor meer informatie over het correct ontwerpen en gebruiken van de onderste navigatiebalk in Android.
Voor meer informatie over codering voor Android, bekijk enkele van onze andere cursussen en tutorials hier op Envato Tuts+!