Vorig jaar introduceerde Google Material Design en het werd duidelijk dat beweging en animatie twee van de meest in het oog springende functies in moderne Android-applicaties zouden zijn. Maar Google bood ontwikkelaars geen gemakkelijke oplossing om ze in applicaties te integreren. Dientengevolge werden vele bibliotheken ontwikkeld om het integratieprobleem op te lossen.
Tijdens de Google I / O van dit jaar introduceerde Google echter de Android Design Support Library om het gebruik van Material Design gemakkelijker te maken. Hierdoor kunnen ontwikkelaars zich richten op de functies die hun toepassingen uniek maken.
In deze zelfstudie laat ik u zien hoe u de scroltechnieken implementeert die worden weergegeven in de Material Design-specificatie van Google. Voordat we beginnen, moet u vertrouwd raken met de beschikbare schuifbare gebieden in een Android-applicatie. In de volgende afbeelding ziet u dat er vier regio's zijn.
Dit is waar meldingen worden weergegeven en de status van verschillende functies van het apparaat wordt weergegeven.
De werkbalk stond voorheen bekend als de actiebalk. Het is nu een meer aanpasbare weergave met dezelfde functionaliteiten.
Deze optionele regio wordt gebruikt om de tabbladen weer te geven die de inhoud van uw toepassing categoriseren. U kunt meer lezen over het gebruik van tabbladen en de verschillende manieren om ze weer te geven in de Material Design-specificatie van Google. Indien van toepassing, kunt u dit ook gebruiken in de laterale navigatie van Google.
Hier kunt u afbeeldingen of uitgebreide app-balken weergeven.
Met betrekking tot schuiftechnieken zijn het de werkbalk en de tab / zoekbalk die reageren wanneer de inhoud van uw toepassing scrolt.
Om mee te gaan, zou je de nieuwste versie van Android Studio moeten gebruiken. Je kunt het krijgen van de Android Developer-website. Om deze schuiftechnieken te proberen, raad ik aan een nieuw project te maken (met een minimum API-niveau van 15), omdat de lay-out van je toepassing aanzienlijk zal veranderen.
Ik heb een startersproject geleverd, dat je kunt downloaden van GitHub. U kunt het startersproject als uitgangspunt gebruiken en de scrolltechnieken gebruiken in uw eigen applicaties. Laten we eerst de volgende afhankelijkheden toevoegen aan uw project build.gradle bestand in de app-map:
compileer 'com.android.support:design:22.2.0' compileer 'com.android.support:recyclerview-v7:22.2.0'
Met de eerste afhankelijkheid krijgt u de ondersteuningsbibliotheek voor Android-ontwerp, die de nieuwe klassen bevat die we nodig hebben voor deze zelfstudie.
Met de tweede afhankelijkheid krijgt u de nieuwste versie van RecyclerView
. De versie die wordt vermeld in het officiële artikel over het maken van lijsten zal deze keer niet nuttig zijn.
Vervolgens zul je wat dummy data nodig hebben om deze technieken te proberen en de RecyclerView
. U kunt ze zelf implementeren of de implementatie kopiëren van de InitialActivity
klasse in het startersproject.
Deze techniek verbergt de werkbalkregio wanneer de inhoud van uw toepassing wordt gescrold. Je kunt de techniek in actie zien in de volgende video.
Voor dit ontwerp van de lay-out, kunt u denken aan zoiets als dit:
Het probleem met deze lay-out is dat je de gebeurtenissen zelf moet beheren, maar het zal pijnloos zijn als je gebruik maakt van de nieuwe klassen. Laten we het als volgt aanpassen:
In deze nieuwe lay-out kunt u zien dat:
Relatieve layout
wordt vervangen door een CoordinatorLayout
Toolbar
is ingepakt in een AppBarLayout
Toolbar
en RecyclerView
ontving een paar extra attributenWat zijn deze nieuwe klassen?
CoordinatorLayout
Deze lay-out is een nieuwe container en een supercharged FrameLayout
dat biedt een extra niveau van controle over aanraakgebeurtenissen tussen onderliggende weergaven.
AppBarLayout
Deze lay-out is een nieuwe container die speciaal is ontworpen om veel van de functies van het app-ontwerpconcept Material Design te implementeren. Houd er rekening mee dat als je het in een ander gebruikt ViewGroup
, de meeste functionaliteit werkt niet.
De sleutel tot deze scrolltechniek en de meeste andere scrolltechnieken die we zullen bespreken, is de CoordinatorLayout
klasse. Deze speciale klasse kan gebeurtenissen ontvangen van en de gebeurtenissen aan zijn of haar kinderopvattingen overdragen, zodat deze op de juiste manier kunnen reageren. Het is ontworpen om te worden gebruikt als de weergave van de rootcontainer.
Om deze techniek mogelijk te maken, is de app: layout_behavior
attribuut geeft aan welke weergave de gebeurtenissen in de Toolbar
. In dit geval is dat het RecyclerView
.
app: layout_behavior = “@ string / appbar_scrolling_view_behavior"
De app: layout_scrollFlags
attribuut van de Toolbar
geeft aan de weergave hoe te reageren.
app: layout_scrollFlags = “scroll | enterAlways"
De app: layout_scrollFlags
attribuut kan vier mogelijke waarden hebben, die kunnen worden gecombineerd om het gewenste effect te creëren:
rol
Deze vlag moet worden ingesteld voor alle weergaven die buiten het scherm moeten scrollen. Weergaven die deze vlag niet gebruiken, blijven aan de bovenkant van het scherm vastzetten.
enterAlways
Deze vlag zorgt ervoor dat deze neerwaartse schuif zichtbaar wordt, waardoor de snelle terugkeer patroon.
enterAlwaysCollapsed
Wanneer een weergave een heeft verklaard minHeight
en als u deze vlag gebruikt, komt de weergave alleen op de minimale hoogte (samengevouwen) uit, maar breidt deze alleen uit naar de volledige hoogte wanneer de scrollweergave zijn top heeft bereikt.
exitUntilCollapsed
Deze vlag zorgt ervoor dat de weergave van het scherm schuift totdat deze is samengevouwen (zijn minHeight
is bereikt) voordat u afsluit.
U kunt nu het project uitvoeren of op drukken Control + R, en zie deze techniek in actie.
Deze techniek schuift de werkbalk buiten het scherm terwijl het tabbladbalkgebied verankerd blijft aan de bovenkant. Je kunt deze techniek in actie zien in de volgende video.
Voor deze techniek ga ik de lay-out van de vorige techniek hergebruiken en een toevoegen TabLayout
bekijk naast de Toolbar
, binnen in de AppBarLayout
.
De TabLayout
weergave biedt een horizontale lay-out om tabbladen weer te geven. U kunt een willekeurig aantal tabbladen toevoegen met behulp van de nieuw tabblad
methode en stel de gedragsmodus in met behulp van de setTabMode
. Laten we beginnen met het vullen van de tabbladen.
tab_layout = (TabLayout) findViewById (R.id.tabs); tab_layout.setTabMode (TabLayout.MODE_FIXED); tab_layout.addTab (tab_layout.newTab (). setText ("Tab 1")); tab_layout.addTab (tab_layout.newTab (). setText ("Tab 2")); tab_layout.addTab (tab_layout.newTab (). setText ("Tab 3"));
Door de waarde van de te wijzigen app: layout_scrollFlags
attribuut en het toevoegen en verwijderen van het Toolbar
en TabLayout
, je kunt animaties krijgen zoals die gebruikt worden in:
Bekijk de volgende video's voor voorbeelden van deze schuiftechniek.
U kunt uw project uitvoeren en deze schuiftechniek in actie zien.
Voor deze scrolltechniek ga ik gebruik maken van de flexibele spatie die ik aan het begin van deze tutorial noemde. Ik doe dit om de initiële hoogte van de te verkleinen AppBarLayout
terwijl de inhoud omhoog scrollt. De hoogte van de AppBarLayout
neemt toe naar zijn oorspronkelijke hoogte terwijl de inhoud naar beneden wordt geschoven. Je kunt deze techniek in actie zien in de volgende video.
Voor deze schuiftechniek ga ik de volgende lay-out gebruiken:
Het ziet er zeker uit als veel code, dus laten we het opsplitsen. In deze lay-out heb ik de volgende wijzigingen aangebracht:
Toolbar
is ingepakt in een CollapsingToolBarLayout
en beide elementen worden in de AppBarLayout
.app: layout_scrollFlags
attribuut is verplaatst van de Toolbar
naar de CollapsingToolBarLayout
, omdat deze container nu verantwoordelijk is voor het reageren op scrolleerevenementen.app: layout_collapseMode
, is toegevoegd aan de Toolbar
. Dit kenmerk zorgt ervoor dat de Toolbar
blijft vastgemaakt aan de bovenkant van het scherm.AppBarLayout
heeft een vaste initiële hoogte van 192dp.FloatingActionButton
is toegevoegd aan de lay-out, onder de RecyclerView
.Waar zijn deze nieuwe klassen voor?
CollapsingToolBarLayout
Dit is een nieuwe weergave, speciaal ontworpen voor het inpakken van de Toolbar
en implementeer een instortende app-balk. Bij gebruik van de CollapsingToolBarLayout
klasse, moet je speciale aandacht besteden aan de volgende attributen:
app: contentScrim
Dit kenmerk geeft de kleur aan die moet worden weergegeven wanneer deze volledig is samengevouwen.
app: expandedTitleMarginStart / app: expandedTitleMarginEnd
Deze attributen specificeren de marges van de uitgevouwen titel. Ze zijn handig als u van plan bent om het te gebruiken setDisplayHomeAsUpEnabled
methode in uw activiteit en vul de nieuwe spaties gemaakt rond de titel.
FloatingActionButton
De zwevende actieknop is een belangrijk onderdeel van Material Design-apps. U kunt zwevende actieknoppen nu opnemen in uw lay-out met slechts enkele regels code. U kunt de app: fabSize
kenmerk om uit twee verschillende formaten te kiezen, standaard- (56dp) en mini (40dp). Standaard is de standaardgrootte.
Het verdwijnende effect wordt automatisch bereikt door de zwevende actieknop te verankeren in de AppBarLayout
de ... gebruiken app: layout_anchor
attribuut. U kunt ook de positie ten opzichte van dit anker opgeven met behulp van de app: layout_anchorGravity
attribuut.
Voordat het project wordt uitgevoerd, moeten we in de activiteit specificeren dat het CollapsingToolBarLayout
zal de titel weergeven in plaats van de Toolbar
. Bekijk het volgende codefragment ter verduidelijking.
collapsing_container = (CollapsingToolbarLayout) findViewById (R.id.collapsing_container); collapsing_container.setTitle (. getResources () getString (R.string.title_activity_technique3));
Voer het project uit om de derde schuiftechniek in actie te zien.
Deze scrolltechniek maakt gebruik van de extended AppBarLayout
, getoond in de vorige techniek, om een afbeelding weer te geven. Je kunt deze techniek zien in de volgende video.
Voor deze techniek ga ik de vorige lay-out opnieuw gebruiken en deze enigszins aanpassen:
In deze lay-out heb ik de volgende wijzigingen aangebracht:
android: background
attribuut is verwijderd uit de AppBarLayout
. Omdat het Figuurweergave
gaat deze ruimte vullen, het is niet nodig om een achtergrondkleur te hebben.app: expandedTitleMarginStart
en app: expandedTitleMarginEnd
attributen zijn verwijderd, omdat we de. niet gebruiken setDisplayHomeAsUpEnabled
methode in de activiteit.Figuurweergave
was toegevoegd voor de Toolbar
. Dit is belangrijk om te voorkomen dat de AppBarLayout
toont een deel van de afbeelding in plaats van de primaire kleur wanneer deze is samengevouwen.Je hebt misschien ook gemerkt dat het Figuurweergave
heeft de app: layout_collapseMode
attribuut. De waarde van het attribuut is ingesteld op parallax
parallax scrollen implementeren. Bovendien kunt u ook de app: layout_collapseParallaxMultiplier
attribuut om een multiplier in te stellen.
Dit zijn alle wijzigingen die u moet aanbrengen om deze schuiftechniek soepel te laten verlopen in uw app. Voer het project uit om deze schuiftechniek in actie te zien.
Voor deze schuiftechniek overlapt de flexibele ruimte de inhoud van de app en scrolt deze buiten het scherm wanneer de inhoud wordt geschoven. Je kunt deze techniek in actie zien in de volgende video.
Voor deze techniek kunt u de lay-out van de vorige techniek opnieuw gebruiken, met een paar kleine wijzigingen.
Voor deze lay-out:
Figuurweergave
en de FloatingActionButton
binnen in de CollapsingToolbarLayout
zijn verwijderd. Voor deze techniek is geen afbeelding vereist.CollapsingToolbarLayout
, de app: contentScrim
kenmerk is vervangen door de android: background
attribuut. We doen dit, omdat de achtergrondkleur moet overeenkomen met de Toolbar
achtergrondkleur netjes bij het verdwijnen.android: background
attribuut is toegevoegd aan de Toolbar
.app: behavior_overlapTop
attribuut is toegevoegd aan de RecyclerView
. Dit is het belangrijkste kenmerk voor deze schuiftechniek aangezien dit kenmerk de mate van overlap aangeeft die de weergave zou moeten hebben met de AppBarLayout
. Om dit kenmerk effect te laten hebben, zou het moeten worden toegevoegd aan dezelfde weergave die de app: layout_behavior
attribuut.Als u deze schuiftechniek met deze wijzigingen probeert te gebruiken, krijgt de resulterende lay-out geen titel in de Toolbar
. Om dit op te lossen, kunt u een Tekstweergave
en voeg het toe aan de Toolbar
programmatisch.
TextView-tekst = nieuwe TextView (this); text.setText (R.string.title_activity_technique5); text.setTextAppearance (this, android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse); toolbar.addView (tekst);
Merk op dat u niet elk van deze technieken in uw app hoeft te implementeren. Sommige zijn nuttiger voor uw ontwerp dan andere. Nu u weet hoe u deze allemaal kunt implementeren, kunt u ervoor kiezen en ermee experimenteren.
Ik hoop dat je deze tutorial nuttig hebt gevonden. Vergeet niet om het te delen als je het leuk vond. U kunt eventuele opmerkingen en vragen hieronder achterlaten.