Koden din første Android Slice og hold brukerne engasjert

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

Skiver: Flere måter for brukere å nyte din app 

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.

Hvordan lager jeg mitt første stykke? 

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 "

Viser appens innhold i Google Søk, med Slice Providers

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:

  • Å velge Ny > Annen > Slice Provider fra Android Studio-verktøylinjen. 
  • Skriv inn navnet MySliceProvider.
  • Sett Opprinnelig språk til Kotlin.
  • Klikk Bli ferdig.
  • Åpne 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.  

Har din Gradle Project Sync mislyktes?

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. 

Å bygge et stykke: URIer, SliceActions, og skilleoppsett

For å gjøre skiveleverandørens boilerplate til et fungerende stykke, må vi gjøre flere endringer:

1. Definer en URI

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 ...

2. Gjør din skive interaktiv 

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. 

3. Bygg skiveens brukergrensesnitt  

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. 

Bygg din første fullt fungerende Android Slice 

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")

Teste dine skiver: Installere Skissevisning 

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):

  • Last ned Googles Slice Viewer-program.
  • Pass på at AVD er oppe og i gang.
  • Finn APK-filen for Slice Viewer, og dra og slipp den på AVD-en.

Slik installerer du Slice Viewer på en fysisk smarttelefon eller nettbrett: 

  • Last ned Slice Viewer.
  • Pass på at smarttelefonen eller nettbrettet er koblet til utviklingsmaskinen din.
  • Flytt Slice Viewer APK til datamaskinens Android / SDK / plattform-verktøy mappe.
  • Åpne et kommandoprompt (Windows) eller Terminal (Mac) -vindu. 
  • Endre katalog (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
  • Kjør kommandoen ved å trykke på Tast inn nøkkel på tastaturet.
  • Bruke adb installasjon beordre å skyve APK til Android-enheten din:
./ adb installere slice-viewer.apk

Opprette en URI Run Configuration 

Deretter må du opprette en kjørekonfigurasjon som passerer skiveens unike URI til din AVD- eller Android-enhet. 

  • Å velge Løpe > Rediger konfigurasjoner ... fra Android Studio-verktøylinjen.
  • Klikk på + knappen og velg deretter Android App.
  • Gi løpekonfigurasjonen et navn. jeg bruker sliceConfig
  • Åpne modul dropdown, og velg deretter app.
  • Åpne Launch dropdown, og velg deretter URL.
  • Skriv inn skiveens URL, i formatet slice-innhold: // pakkenavn / skive-URL. For eksempel er min skiveadresse: slice-innhold: //com.jessicathornsby.kotlinslices/launchMainActivity.
  • Klikk OK.
  • Å velge Løpe > Kjør sliceConfig fra Android Studio-verktøylinjen, og velg deretter Android-enheten din.

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

Få mer ut av skivene dine: Legge til en annen 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. 

Lag en SecondActivity

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:

Bygg flere komplekse brukergrensesnitt: Slice End Items 

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:

  • Å velge Ny > Image Asset fra Android Studio-verktøylinjen.
  • Klikk den lille Clipart knappen (dette viser et bilde av en Android som standard).
  • Velg ikonet du vil bruke til din Start MainActivity sluttprodukt. Jeg bruker Hjem ikon.
  • Gi dette ikonet navnet ic_home, og klikk deretter neste.
  • Les informasjonen på skjermen, og klikk på hvis du er glad for å fortsette Bli ferdig.

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.

Opprette den andre SliceAction

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. 

Multimedieskiver: Opprette gridlayouts

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: 

  • Gjennomfør en ListBuilder.
  • Legg til en rutenett til ListBuilder, ved hjelp av addGridRow
  • Legg til celler i raden ved hjelp av addCell. Hver rad kan vise maksimalt fem celler.

Du kan deretter legge til innhold i hver celle, for eksempel: 

  • En tittel, som du legger til ved hjelp av addTitleText.
  • Kroppstekst, bruk av Legg til tekst.
  • Bilder, som du oppretter bruker Legg til bilde. Hvert cellebilde må ha ett av følgende attributter: LARGE_IMAGE, SMALL_IMAGE, eller ICON_IMAGE
  • En innholdsintensjon, som omtrent svarer til a 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.

Sørg for at skiven ser bra ut, uavhengig av vertsprogrammet 

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:

1. Stor

I dette formatet viser Android så mange rader som mulig i ledig plass. Dette er modusen som Slice Viewer bruker som standard. 

2. Snarvei

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)

3. Små

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.  

Kutte ned kode, med Slice Builders KTX

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")

Konklusjon 

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.