Det harde arbeidet er ikke over, bare fordi appen din har racket opp massevis av nedlastinger og positive anmeldelser i Google Play-butikken. Din typiske mobile bruker har dusinvis av apper som er installert på enheten, og når nye apper blir utgitt hele tiden, må du jobbe hardt for å holde publikumets interesse!
Å holde brukere tilbake til appen din er avgjørende å skape en stabil, lojal brukerbase. Dessuten, hvis du har tjent penger på appen din, vil mengden tid folk bruker i søknaden din direkte påvirke hvor mye penger du lager - tenk på hvert ekstra sekund som en annen mulighet til å vise en annonse eller friste brukeren til å sprute ut på en -app kjøp!
I år introduserte jeg Google skiver, en ny funksjon som lover å drive brukerne tilbake til appen din ved å få appens funksjoner og innhold foran dem akkurat når de trengs mest.
Med skiver som er utformet for å være et viktig verktøy for å beholde publikum, er det nå den perfekte tiden for å få litt praktisk erfaring med denne up-and-coming Android-funksjonen. Ved slutten av denne artikkelen har du opprettet en rekke skiver, fra et enkelt stykke som starter en aktivitet når du tappes gjennom til mer komplekse skiver som består av ikoner, bilder, grids og flere SliceActions
.
Ligner på widgets, er skiver utklipp av innhold som vises utenfor programkonsekvensen, og øker appens synlighet og gir deg flere muligheter til å engasjere publikum.
Skiver kan potensielt øke appens synlighet, med Google lovende å legge til støtte for skiver til områdene hvor mange Android-brukere bruker betydelige mengder tid, inkludert Google-søk og Google-assistenten. Siden de er en del av Android Jetpack, er skiver kompatible med Android 4.4 og høyere, noe som betyr at skivene dine har potensial til å nå 95% av alle Android-brukere.
Så skiver har mye å tilby - men hvordan fungerer de?
For øyeblikket, hvis du utfører et søk i Google-appen, kan Google foreslå et relevant program som er installert på enheten din. Hvis du for eksempel har installert Facebook for mobil, skriver du deretter facebook vil hente en direkte kobling til Facebook-appen.
Skiver tar denne appen sammen et skritt videre, ved å fokusere på bestemte oppgaver brukeren kanskje vil utføre innenfor programmene de allerede har installert.
La oss se på et eksempel: forestill deg at du har installert en Book A Hotel-app som lar deg søke etter et hotell og reservere et rom. Når du skriver inn London hoteller inn i Google, møter du de vanlige søkeresultatene, pluss et stykke fra Book A Hotel-programmet. Denne delen anbefaler et hotell i London og viser informasjon som hotellets navn og adresse, i tillegg til en SliceAction
, i form av en knapp som lar deg reservere et rom direkte fra stykkets brukergrensesnitt (brukergrensesnitt).
For brukeren har denne skiven gitt lett tilgang til informasjonen og funksjonene de trengte på det aktuelle tidspunktet. For utvikleren har denne snittet gjort det mulig for dem å få søknaden deres foran en bruker på det nøyaktige tidspunktet da de sto størst mulighet for å gjenoppta dem.
La oss begynne med å lage et enkelt stykke som, når det er tappet, vil starte applikasjonen vår Hoved aktivitet
.
Denne enkle teknikken gjør det mulig å starte en hvilken som helst oppgave, direkte fra et stykks brukergrensesnitt. I vårt Book A Hotel-eksempel kan vi bare knytte knappen til tilhørende app BookRoomActivity
, som ville være en enkel men effektiv måte å redusere antall skjermer brukeren må navigere for å fullføre denne oppgaven.
For å komme i gang, opprett et nytt Android-prosjekt. Du kan bruke de ønskede innstillingene, men sørg for at du velger Inkluder Kotlin-støtte kryssboks når du blir bedt om det.
Når du har opprettet prosjektet ditt, åpner du build.gradle-filen og legger til skive-kjerne
og slice-builder
avhengigheter:
avhengigheter implementation 'androidx.appcompat: appcompat: 1.0.0-alpha3' implementering 'androidx.slice: skive-kjerne: 1.0.0-alpha3' implementering 'androidx.slice: skivebyggere: 1.0.0-alpha3' implementering ' androidx.constraintlayout: constraintlayout: 1.1.0 "implementering" org.jetbrains.kotlin: kotlin-stdlib-jdk7: $ kotlin_version "
Deretter må vi opprette en skive leverandør, Hvilken komponent er ansvarlig for visning av appens innhold utenfor programkonsollen.
Du oppretter en skiveleverandør ved å bruke Android Studios skabelonleverandørmal:
MySliceProvider
klasse, og du bør se følgende automatisk genererte kode: importer android.content.ContentResolver import android.content.Intent import android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice.builders.ListBuilder klasse MySliceProvider: SliceProvider () overstyre moro onCreateSliceProvider () : Boolean return true overstyre moro onMapIntentToUri (intent: Intent?): Uri var uriBuilder: Uri.Builder = Uri.Builder () .skjema (ContentResolver.SCHEME_CONTENT) hvis (intent == null) returnerer uriBuilder.build val data = intent.data hvis (data! = null && data.path! = null) val sti = data.path.replace ("/", "") uriBuilder = uriBuilder.path (sti) val context = kontekst hvis (kontekst! = null) uriBuilder = uriBuilder.authority (context.getPackageName ()) returnere uriBuilder.build () // Konstruer slice // override fun onBindSlice (sliceUri: Uri): Slice? val context = getContext ()?: return null return if (sliceUri.path == "/") // Tilpass Slice // ListBuilder (kontekst, sliceUri) .addRow it.setTitle ("URI funnet.") .build () else ListBuilder (kontekst, sliceUri) .addRow it.setTitle ("URI ikke funnet.") .build () // Abonner på en datakilde, om nødvendig // overstyr moro påSlicePinned (sliceUri: Uri?) // Unngå hukommelse lekkasjer ved å abonnere fra datakilden og fjerne noen observatører // overstyr moro onSliceUnpinned (sliceUri: Uri?)
Hvis du lager skiveleverandøren din ved hjelp av Ny > Annen > Slice Provider, så vil Android Studio også legge til den nødvendige leverandøren til din Manifest:
Denne oppføringen sikrer at skjæret ditt kan oppdages av andre applikasjoner.
Så langt har vi bare brukt kode som Android Studio har generert automatisk, men prosjektet ditt kan allerede nekter å kompilere!
Feil, manglende funksjonalitet og allsidig merkelig oppførsel er bare en del av det morsomme å jobbe med tidlig utgivelser. Ved skrivingstidspunktet ville det ofte være uforklarlig å generere en stykke leverandør et nytt sett av avhengigheter til prosjektet ditt build.gradle fil.
implementering 'androidx.slice: skiver-kjerne: 1.0.0-alpha1' implementering 'androidx.slice: skiver-builders: 1.0.0-alpha1'
Ikke bare er disse avhengighetene unødvendige - de er feil. Selv om det er lett å gå glipp av, sammenlign:
implementering 'androidx.slice: skiver-kjerne: 1.0.0-alpha3'
Med riktig:
implementering 'androidx.slice: slice-core: 1.0.0-alpha1'
En eneste s kan bety forskjellen mellom en fungerende applikasjon og et prosjekt som nekter å kompilere. Sjansene er at denne feilen vil bli adressert før den offisielle utgivelsen av skiver, men hvis Android Studio begynner å klage på uoppløste avhengigheter, så sjekk din build.gradle fil for å se om dette har skjedd i prosjektet ditt.
SliceActions
, og skilleoppsettFor å gjøre skiveleverandørens boilerplate til et fungerende stykke, må vi gjøre flere endringer:
Hvert stykke har en unik URI, og det er slice leverandørens jobb å gi kartlegging mellom denne URI og den tilsvarende delen.
Apper som er i stand til å vise et stykke er kjent som vertsapplikasjoner. Hver gang en vert trenger å vise et stykke, sender den en bindende forespørsel til skiveleverandøren med URI av skiven som den leter etter. Din skiveleverandør vil da sjekke URI og returnere riktig skive.
I følgende utdrag, er onBindSlice
Metoden sjekker etter / myURI
sti og returnere et stykke som viser en Hei Verden budskap.
klasse MySliceProvider: SliceProvider () overstyre moro påCreateSliceProvider (): Boolean return true overstyre moro onBindSlice (sliceUri: Uri): Slice? return if (sliceUri.path == "/ myURI") ListBuilder (kontekst, sliceUri, ListBuilder.INFINITY) .addRow it.setTitle ("Hello World") .build () else ...
Mens du kunne Lag et stykke som bare viser litt informasjon, hvis du vil at skjæret ditt skal være interaktivt, må du opprette en eller flere SliceActions
.
EN SliceAction
kan bestå av en tittel, et ikon og en PendingIntent
. Du kan også merke SliceActions
som primære handlinger, som utløser når brukeren tapper hvor som helst på den stykkets rad.
Du definerer et stykke layout ved å implementere en ListBuilder
, legger til en rad, og deretter legger du til elementer i den raden. For eksempel, her bruker jeg ListBuilder
og addRow
å lage et stykke som består av en tittel og en undertekst:
importer android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice.builders.ListBuilder importer androidx.slice.builders.ListBuilder.INFINITY klasse MySliceProvider: SliceProvider () overstyr moro påCreateSliceProvider (): Boolean return true overstyr moro onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path når (sti) "/ launchMainActivity" -> return createSlice (sliceUri) return null moro createSlice (sliceUri: Uri): Slice return ListBuilder (kontekst, sliceUri, INFINITY) .addRow it .apply setTitle ("Dette er en tittel") setSubtitle ("Dette er en undertekst") .build ()
Du kan vise en blanding av forskjellige innholdstyper i samme rad, for eksempel tekst, handlinger og ikoner.
La oss nå bruke alt dette til vårt prosjekt og lage et stykke som lanserer applikasjonen vår Hoved aktivitet
når tappet.
Åpne MySliceProvider
klasse, og legg til følgende:
importere android.app.PendingIntent importere android.content.Intent importere android.net.Uri import androidx.core.graphics.drawable.IconCompat import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice.builders.ListBuilder import androidx .slice.builders.SliceAction // Utvid fra SliceProvider // klasse MySliceProvider: SliceProvider () // Initialiser din slice provider // overstyr moro onCreateSliceProvider (): Boolean return true // Bygg slice // override fun onBindSlice ( SliceUri: Uri): Slice? // Sjekk URI-banen // Val-banen = SliceUri.path når (bane) // Definer skiveens URI; Jeg bruker 'launchMainActivity' // "/ launchMainActivity" -> return createSlice (sliceUri) return null fun createSlice (sliceUri: Uri): Slice val activityAction = createActivityAction () // Opprett ListBuilder, som vi bruk for å legge til rader i vårt snitt // val listBuilder = ListBuilder (kontekst !!, sliceUri, ListBuilder.INFINITY) // Konstruer rader ved hjelp av RowBuilder // val rowBuilder = ListBuilder.RowBuilder (listBuilder) // Sett tittelteksten // .setTitle ("Open MainActivity.") // Sett radets primære handling // .setPrimaryAction (activityAction) // Legg til rad til ListBuilder // listBuilder.addRow (rowBuilder) // Bygg listen // returlisteBuilder.build () fun createActivityAction (): SliceAction val intent = Intent (kontekst, MainActivity :: class.java) returnere SliceAction (PendingIntent.getActivity (kontekst, 0, intensjon, 0), IconCompat.createWithResource (kontekst !!, R. drawable.ic_home), "Åpne MainActivity")
Hvis du skal sette skivene dine på prøve, må du ha minst ett program som er i stand til å vise skiver.
Skiver vil angivelig gjøre debut i Google-søk senere i år, men på skrivingstidspunktet hadde denne funksjonen ennå ikke blitt rullet ut. Foreløpig er den eneste måten å teste skiver på, å installere Googles Slice Viewer-app, som er utformet for å etterligne hvordan skiver vil komme til syne i Google-søk.
Slik installerer du Slice Viewer på en Android Virtual Device (AVD):
Slik installerer du Slice Viewer på en fysisk smarttelefon eller nettbrett:
cd
) slik at kommandoprompt eller terminalen peker på mappen Android / sdk / plattform-verktøy, for eksempel, her er min kommando:cd / Users / jessicathornsby / Bibliotek / Android / sdk / platform-verktøy
adb installasjon
beordre å skyve APK til Android-enheten din:./ adb installere slice-viewer.apk
Deretter må du opprette en kjørekonfigurasjon som passerer skiveens unike URI til din AVD- eller Android-enhet.
Første gang Slice Viewer prøver å vise skiven din, vil den be om tillatelse til å få tilgang til skiveens unike URI. Tap Tillate og naviger tillatelsesdialogen, og skjæret ditt skal vises på skjermen.
Å samhandle med SliceAction
, Klikk på Åpne MainActivity knappen, og snittet vil svare ved å starte applikasjonen din Hoved aktivitet
.
SliceAction
Hvorfor begrense deg til en SliceAction
, når du kan ha flere SliceActions
? I denne delen skal vi implementere to SliceActions
, hvor hver handling lanserer en annen Aktivitet
. Jeg skal også introdusere noen nye UI-elementer, ved å legge til en undertekst og noen avslutte gjenstander til vårt stykke.
La oss få oppsettet ut av veien og lag et sekund Aktivitet
at vår andre SliceAction
kan lenke til.
Velg først Ny > Kotlin File / Class fra Android Studio-verktøylinjen. I den nye fildialogen åpner du Snill rullegardinmenyen og velg Klasse. Navn denne klassen SecondActivity
, og klikk deretter OK.
Åpne nå din SecondActivity
klasse og legg til følgende:
importer androidx.appcompat.app.AppCompatActivity import android.os.Bundle class SecondActivity: AppCompatActivity () overstyr moro onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) setContentView (R.layout.activity_second)
Deretter velger du Ny > Android Ressursfil fra Android Studio-verktøylinjen. I det etterfølgende vinduet åpner du Ressurs type dropdown, og velg Oppsett. Navn denne filen activity_second
, og klikk OK.
Åpne nå denne layoutfilen og legg til følgende kode:
http://schemas.android.com/apk/res/android "xmlns: app =" http://schemas.android.com/apk/res-auto "xmlns: tools =" http://schemas.android. com / verktøy "android: layout_width =" match_parent "android: layout_height =" match_parent "verktøy: context =". MainActivity ">
Åpne prosjektets manifest, og erklære dette SecondActivity
:
Sluttelementer kan enten være en tidsstempel, et bilde eller en SliceAction
, men som navnet antyder, vises de alltid på slutten av en rad. Du kan legge til flere endeelementer i en enkelt rad, men avhengig av ledig plass er det ingen garanti for at alle dine sluttartikler blir vist til brukeren.
Vi skal skape vår SliceActions
som ikoner, så du må legge til to nye drawables til prosjektet ditt:
Gjenta trinnene ovenfor for å lage et ikon for din Start SecondActivity skivehandling. For mitt andre sluttelement, bruker jeg anrop ikon og navngi det ic_call.
Vi er nå klare til å legge til et sekund SliceAction
til MySliceProvider
klasse:
importere android.app.PendingIntent importere android.content.Intent importere android.net.Uri import androidx.core.graphics.drawable.IconCompat import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice.builders.ListBuilder import androidx .slice.builders.SliceAction klasse MySliceProvider: SliceProvider () overstyre moro onCreateSliceProvider (): Boolean return true overstyre moro onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path når (path) "/ launchMainActivity" -> return createSlice (sliceUri) return null fun createSlice (sliceUri: Uri): Slice val activityAction = createActivityAction () IconCompat.createWithResource , R.drawable.ic_home) .toIcon () val activityAction2 = createSecondActivityAction () IconCompat.createWithResource (kontekst !!, R.drawable.ic_call) .toIcon () // Konstruer foreldrebyggeren // val listBuilder = ListBuilder (kontekst! !, sliceUri) // Konstruer byggeren for rad // val myRow = ListBuilder.RowBuilder (listBuilder) .setTitle ("Launch MainActivity.") .setSubtitle ("Dette er en undertekst") // Legg til handlingene som vi ' Jeg skal bruke som sluttartikler // myRow.addEndItem (activityAction) myRow.addEndItem (activityAction2) // Legg til rad til foreldrebyggeren // listBuilder.addRow (myRow) // Bygg skiven // returlisteBuilder.build () morsom createActivityAction (): SliceAction val intent = Intent (kontekst, MainActivity :: class.java) returnere SliceAction (PendingIntent.getActivity ( kontekst, 0, intent, 0), IconCompat.createWithResource (kontekst !!, R.drawable.ic_home) .toIcon (), "Launch MainActivity") morsom createSecondActivityAction (): SliceAction val intent = Intent (kontekst, SecondActivity: : class.java) returnere SliceAction (PendingIntent.getActivity (kontekst, 0, intensjon, 0), IconCompat.createWithResource (kontekst !!, R.drawable.ic_call) .toIcon (), "Launch SecondActivity")
Siden vi ikke har endret URI, trenger vi ikke å opprette en ny kjørekonfigurasjon, noe som betyr at testing av denne delen er så enkel som å velge Løpe > sliceConfig fra Android Studio-verktøylinjen.
Du kan laste ned dette prosjektet fra opplæringen GitHub repo.
Frem til dette punktet har vi konstruert alle våre skiver med kun rader, men du kan også lage skiver med Nett rader og celler.
I denne siste delen skal vi lage et stykke som består av en tittel, en undertekst og en enkelt rad delt inn i tre celler. Hver celle vil ha sin egen tittel, litt kroppstekst og et bilde, og hver enkelt vil utføre en unik handling når den blir tappet.
For å legge ut skiven i et rutenett, må du:
ListBuilder
.ListBuilder
, ved hjelp av addGridRow
. addCell
. Hver rad kan vise maksimalt fem celler.Du kan deretter legge til innhold i hver celle, for eksempel:
addTitleText
.Legg til tekst
.Legg til bilde
. Hvert cellebilde må ha ett av følgende attributter: LARGE_IMAGE
, SMALL_IMAGE
, eller ICON_IMAGE
. SliceAction
. For å holde dette eksemplet grei, vil du enkelt laste en artikkel i enhetens standard nettleser ved å trykke på hver celle, men hvis du foretrekker en mer autentisk skiveropplevelse, kan du endre setContentIntent
kode. Jeg skal inkludere noen bilder i rutenettet mitt, så du må legge til minst en drawable til prosjektet ditt. Jeg bruker Kotlin-logoen, men du kan ta tak i noe bilde og slippe det inn i prosjektets teikne mappe.
Nå er du klar til å åpne MySliceProvider
klassen og bygg nettverket ditt:
importere android.app.PendingIntent importere android.content.Context import android.content.Intent importere android.net.Uri import androidx.core.graphics.drawable.IconCompat import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice .builders.ListBuilder klasse MySliceProvider: SliceProvider () overstyr moro onCreateSliceProvider (): Boolean return true overstyre moro onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path når (path) "/ launchMainActivity" -> return createSliceWithGridRow (sliceUri) return null fun createSliceWithGridRow (sliceUri: Uri): Slice return ListBuilder (kontekst, sliceUri, ListBuilder.INFINITY) .setHeader it.apply setTitle ("Vil du begynne å lære Kotlin for Android?") setSubtitle ("Sjekk ut disse artiklene!") // Legg til en rutenett til listenbyggeren // .addGridRow it.apply / / Legg til en celle i raden // addCell it.apply // Legg til innhold i cellen din // addTitleText ("Java vs. Kotlin") addText ("Del 1") addImage (IconCompat.createWithResource (kontekst, R. drawable.kotlin), ListBuilder.LARGE_IMAGE) // Angi hensikten som skal utløse når brukeren samhandler med denne cellen // .setContentIntent (loadArticlePendingIntent (kontekst, "https://code.tutsplus.com/articles/java-vs- kotlin-bør-du-bruke-kotlin-for-android-utviklingen ...) addCell it.apply addTitleText ("Koding i Kotlin") addText ("Del 2") addImage (IconCompat.createWithResourc e (kontekst, R.drawable.kotlin), ListBuilder.LARGE_IMAGE) .setContentIntent (loadArticlePendingIntent (kontekst, "https://code.tutsplus.com/tutorials/start-developing-android-apps-with-kotlin-part-1 --cms-27827? _ga = ...) addCell it.apply addTitleText ("Lambdas & NPE") addText ("Del 3") addImage (IconCompat.createWithResource (kontekst, R.drawable.kotlin), ListBuilder. LARGE_IMAGE) .setContentIntent (loadArticlePendingIntent (kontekst, "https://code.tutsplus.com/articles/coding-functional-android-apps-in-kotlin-lambdas-null-safety-more...) .build ( ) Private Fun loadArticlePendingIntent (kontekst: Kontekst, url: String) = PendingIntent.getActivity (kontekst, 0, Intent (Intent.ACTION_VIEW) .apply data = Uri.parse (url), 0)
Du finner den komplette koden for dette prosjektet i vår GitHub repo.
Kjør denne appen i din AVD eller fysiske Android-enhet, og prøv å samhandle med hvert element i rutenettet. Hver celle skal knytte til en annen artikkel.
Måten din skive innhold vises på, kan variere, avhengig av modus Vertsprogrammet er konfigurert for. For å sikre at skivene dine ser bra ut og fungerer riktig, uavhengig av vertsprogrammet, må du teste skivene dine på tvers av alle de forskjellige skiveinnstillingene.
Siden gridskiven har betydelig mer innhold enn de forrige skivene, er det den beste kandidaten som illustrerer forskjellene mellom disse ulike skiveinnstillingene.
For å sette snittet på prøve, klikk på det lille ikonet i Slice Viewerens øverste høyre hjørne, og sykle deretter gjennom følgende moduser:
I dette formatet viser Android så mange rader som mulig i ledig plass. Dette er modusen som Slice Viewer bruker som standard.
I denne modusen er skiven representert av et ikon og en etikett.
Hvis det er en primær overskrift knyttet til din SliceAction
, da vil dette bli brukt som skiveikonet ditt. Hvis det ikke er noe ikon tilgjengelig, viser Android i stedet den primære handlingen som er knyttet til skiveens første rad, som i dette tilfellet er vår Kotlin-drawable.
Hvis du vil endre ikonet som vises i snarvei, legger du til en ekstra trekk for prosjektet, og oppdaterer deretter følgende del av skiveleverandøren:
.addGridRow it.apply addCell it.apply addTitleText ("Java vs. Kotlin") addText ("Del 1") // Referer den nye drawable // addImage (IconCompat.createWithResource (kontekst, R.drawable.androidlogo) , ListBuilder.LARGE_IMAGE)
Liten modus har en begrenset høyde og vil enten vise en enkelt SliceItem
eller en begrenset samling av gjenstander som en enkelt rad av innhold. Hvis skiven har en overskrift, vises dette, noe som er akkurat det som skjer med skiven.
Endring av tittelen eller underteksten vil påvirke innholdet som vises i liten modus.
morsomt createSliceWithGridRow (sliceUri: Uri): Slice return ListBuilder (kontekst, sliceUri, ListBuilder.INFINITY) .setHeader it.apply setTitle ("Dette er tittelen") setSubtitle ("Dette er underteksten")
Hvis skiven ikke inneholder en topptekst, vil skiveens første rad bli vist i stedet.
Når du har lært hvordan du implementerer en ny funksjon, lærer du det neste trinnet å levere de samme resultatene, med mindre kode!
Android KTX er en samling av moduler som består av utvidelser som optimaliserer Android-plattformen for Kotlin. Android KTXs Slice Builders KTX-modul ødelegger byggemønsteret i en Kotlin-vennlig DSL som hjelper deg med å lage dine skiver på en mer konsistent, lesbar måte. For å komme i gang med Slice Builders KTX, erstatt følgende avhengighet:
implementering 'androidx.slice: slice-builders: 1.0.0-alpha3'
Med:
implementering 'androidx.slice: slice-builders-ktx: 1.0.0-alpha3'
Du kan da endre din createSlice
metode for å bruke denne DSL. For eksempel, her er et enkelt stykke som viser en tittel og en undertekst:
importer android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice.builders.ListBuilder importer androidx.slice.builders.ListBuilder.INFINITY klasse MySliceProvider: SliceProvider () overstyr moro påCreateSliceProvider (): Boolean return true overstyr moro onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path når (sti) "/ launchMainActivity" -> return createSlice (sliceUri) return null moro createSlice (sliceUri: Uri): Slice return ListBuilder (kontekst, sliceUri, INFINITY) .addRow it .apply setTitle ("Dette er en tittel") setSubtitle ("Dette er en undertekst") .build ()
Ved hjelp av DSL blir dette:
importer android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider importere androidx.slice.builders.ListBuilder importer androidx.slice.builders.list import androidx.slice.builders.row klasse MySliceProvider: SliceProvider () override morsom onCreateSliceProvider (): Boolean return true overstyre moro onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path når (sti) "/ launchMainActivity" -> return createSlice (sliceUri) return null moro createSlice (sliceUri: Uri): Slice // Instant en ListBuilder og ring bygge når lambda er ferdig kjører // returliste (kontekst, sliceUri, ListBuilder.INFINITY) // Instant row og legg det til ListBuilder // rad // setTitle og setSubtitle er begge inne i raden lambda // setTitle ("Dette er en tittel" ) setSubtitle ("Dette er en undertekst")
I denne artikkelen har vi noen praktisk erfaring med Android's up-and-coming skiverfunksjon. Vi så hvordan du lager et enkelt stykke som kan gi direkte tilgang til alle deler av søknaden din, før du fortsetter å lage mer komplekse skiver som består av sluttartikler, bilder, tilleggs tekst og flere SliceActions
.
Du kan lære mer om skiver i de offisielle Android-dokumentene.