Het harde werk is nog niet voorbij, alleen omdat uw app talloze downloads en positieve recensies heeft verzameld in de Google Play Store. Uw typische mobiele gebruiker heeft tientallen van apps die op hun apparaat zijn geïnstalleerd en waarbij steeds nieuwe apps worden uitgebracht, moet u hard werken om de interesse van uw publiek te behouden!
Zorg ervoor dat gebruikers terugkomen naar uw app beslissend naar het creëren van een stabiele, loyale gebruikersbasis. Als u bovendien inkomsten genereert met uw app, is de hoeveelheid tijd die mensen in uw app besteden, direct van invloed op het bedrag dat u verdient. Denk aan elke extra seconde als een andere gelegenheid om een advertentie weer te geven of de gebruiker te verleiden om op een in te spatten -app aankoop!
Op de I / O van dit jaar introduceerde Google plakjes, een nieuwe functie die belooft gebruikers terug te brengen naar uw app door de functies en inhoud van uw app voor hen te plaatsen op het exacte moment waarop ze het meest nodig zijn.
Met plakjes die een belangrijk hulpmiddel vormen voor het behouden van je publiek, is dit het perfecte moment om hands-on ervaring op te doen met deze opkomende Android-functie. Aan het einde van dit artikel hebt u een reeks segmenten gemaakt, van een eenvoudig segment dat een activiteit lanceert wanneer er wordt doorgetikt tot complexere segmenten bestaande uit pictogrammen, afbeeldingen, rasters en meerdere SliceActions
.
Net als widgets zijn segmenten stukjes inhoud die buiten de toepassingscontext worden weergegeven, waardoor de zichtbaarheid van uw app wordt vergroot en u meer mogelijkheden krijgt om uw publiek te betrekken.
Segmenten hebben de potentie om de zichtbaarheid van uw app aanzienlijk te vergroten, waarbij Google belooft steun voor segmenten toe te voegen aan de gebieden waar veel Android-gebruikers veel tijd doorbrengen, waaronder Google Zoeken en de Google Assistent. Omdat ze deel uitmaken van Android Jetpack, zijn slices compatibel met Android 4.4 en hoger, wat betekent dat je slices 95% van alle Android-gebruikers kunnen bereiken.
Segmenten hebben dus veel te bieden, maar hoe werken ze?
Momenteel, als u een zoekopdracht uitvoert in de Google-app, kan Google u een relevante toepassing voorstellen die op uw apparaat is geïnstalleerd. Bijvoorbeeld, als u Facebook voor mobiel heeft geïnstalleerd, typ dan facebook zal een directe link naar de Facebook-app oproepen.
Slices nemen deze app nog een stap verder door te focussen op specifieke taken die de gebruiker wil uitvoeren binnen de applicaties die ze al hebben geïnstalleerd.
Laten we een voorbeeld bekijken: stel dat u een Book A Hotel-app heeft geïnstalleerd waarmee u naar een hotel kunt zoeken en een kamer kunt reserveren. Wanneer je typt Hotels in Londen bij Google kom je de gebruikelijke zoekresultaten tegen, plus een deel van de toepassing in het Boek een hotel. Dit segment beveelt een hotel in Londen aan en geeft informatie weer zoals de naam en het adres van het hotel, plus een SliceAction
, in de vorm van een knop waarmee u een kamer rechtstreeks kunt reserveren via de gebruikersinterface van het segment (UI).
Voor de gebruiker heeft dit segment eenvoudig toegang geboden tot de informatie en functies die ze op dat moment nodig hadden. Voor de ontwikkelaar heeft dit segment hen in staat gesteld om hun toepassing voor een gebruiker te krijgen op het exacte moment waarop zij de grootste kans hadden om ze opnieuw te activeren..
Laten we beginnen met het maken van een eenvoudig segment dat, wanneer er op wordt getikt, onze applicaties zal starten Hoofdactiviteit
.
Deze eenvoudige techniek maakt het mogelijk om elke taak direct vanuit de gebruikersinterface van een slice te starten. In ons Boek A Hotel-voorbeeld kunnen we de knop gewoon koppelen aan de gerelateerde app's BookRoomActivity
, wat een eenvoudige maar effectieve manier zou zijn om het aantal schermen dat de gebruiker moet navigeren te verminderen om deze specifieke taak te voltooien.
Maak een nieuw Android-project om aan de slag te gaan. U kunt de gewenste instellingen gebruiken, maar zorg ervoor dat u de Inclusief Kotlin-ondersteuning checkbox wanneer gevraagd.
Nadat u uw project hebt gemaakt, opent u het bestand build.gradle en voegt u het toe slice-core
en slice-builder
afhankelijkheden:
afhankelijkheden implementatie 'androidx.appcompat: appcompat: 1.0.0-alpha3' implementatie 'androidx.slice: slice-core: 1.0.0-alpha3' implementatie 'androidx.slice: slice-builders: 1.0.0-alpha3' implementatie ' androidx.constraintlayout: constraintlayout: 1.1.0 'implementatie' org.jetbrains.kotlin: kotlin-stdlib-jdk7: $ kotlin_version "
Vervolgens moeten we een maken slice provider, Dit is het onderdeel dat verantwoordelijk is voor het weergeven van de inhoud van uw app buiten de toepassingscontext.
U maakt een slice-provider met de segmentprogrammasjabloon van Android Studio:
MySliceProvider
class, en je zou de volgende automatisch gegenereerde code moeten zien: import android.content.ContentResolver import android.content.Intent import android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider import androidx.slice.builders.ListBuilder class MySliceProvider: SliceProvider () override fun onCreateSliceProvider () : Boolean return true override-fun onMapIntentToUri (intent: Intent?): Uri var uriBuilder: Uri.Builder = Uri.Builder (). Scheme (ContentResolver.SCHEME_CONTENT) if (intent == null) return uriBuilder.build () val data = intent.data if (data! = null && data.path! = null) val path = data.path.replace ("/", "") uriBuilder = uriBuilder.path (pad) val context = context if (context! = null) uriBuilder = uriBuilder.authority (context.getPackageName ()) retourneer uriBuilder.build () // Construeer de slice // override-fun onBindSlice (sliceUri: Uri): Slice? val context = getContext ()?: return null return if (sliceUri.path == "/") // Pas de segment // ListBuilder aan (context, sliceUri) .addRow it.setTitle ("URI found.") .build () else ListBuilder (context, sliceUri) .addRow it.setTitle ("URI not found.") .build () // Abonneer u op een gegevensbron, indien nodig // negeer plezier opSlicePinned (sliceUri: Uri?) // Voorkom geheugenlekken door u af te melden bij de gegevensbron en eventuele waarnemers te verwijderen // negeer plezier opSliceUpind (sliceUri: Uri?)
Als u uw slice-provider maakt met nieuwe > anders > Slice Provider, dan voegt Android Studio ook de benodigde provider toe aan je Manifest:
Deze invoer zorgt ervoor dat uw slice kan worden ontdekt door andere applicaties.
Tot nu toe hebben we alleen code gebruikt die Android Studio automatisch heeft gegenereerd, maar uw project mogelijk wel nu al weiger te compileren!
Bugs, ontbrekende functionaliteit en algeheel vreemd gedrag zijn slechts een deel van het plezier van het werken met vroege releases. Op het moment van schrijven zou het genereren van een slice-provider soms op onverklaarbare wijze een nieuwe set afhankelijkheden toevoegen aan uw project build.gradle het dossier.
implementatie 'androidx.slice: slices-core: 1.0.0-alpha1' implementatie 'androidx.slice: slices-builders: 1.0.0-alpha1'
Deze afhankelijkheden zijn niet alleen overbodig, ze zijn ook fout. Hoewel het gemakkelijk te missen is, vergelijk:
implementatie 'androidx.slice: slices-core: 1.0.0-alpha3'
Met de juiste:
implementatie 'androidx.slice: slice-core: 1.0.0-alpha1'
Een s kan het verschil betekenen tussen een functionerende applicatie en een project dat weigert te compileren. De kans is groot dat deze bug wordt aangepakt voordat de plakken officieel worden vrijgegeven, maar als Android Studio begint te klagen over onopgeloste afhankelijkheden, controleer dan uw build.gradle bestand om te zien of dit is gebeurd in uw project.
SliceActions
, en Slice LayoutsOm de boilerplate-code van de slice-provider in een functionerend segment te veranderen, moeten we verschillende wijzigingen aanbrengen:
Elke slice heeft een unieke URI en het is de taak van de slice-provider om de toewijzing tussen deze URI en de bijbehorende slice te verzorgen.
Apps die een segment kunnen weergeven, zijn bekend host applicaties. Telkens wanneer een host een segment moet weergeven, stuurt deze een bindingsverzoek naar de slice-provider met de URI van het segment waarnaar het zoekt. Uw slice-provider controleert vervolgens de URI en retourneert het juiste segment.
In het volgende fragment, de onBindSlice
methode is het controleren van de / myURI
pad en een segment retourneert dat a weergeeft Hallo Wereld bericht.
class MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true onderdrukt plezier opBindSlice (sliceUri: Uri): Slice? return if (sliceUri.path == "/ myURI") ListBuilder (context, sliceUri, ListBuilder.INFINITY) .addRow it.setTitle ("Hello World") .build () else ...
Terwijl jij kon maak een segment dat eenvoudig wat informatie weergeeft, als u wilt dat uw segment interactief is, dan moet u er een of meer maken SliceActions
.
EEN SliceAction
kan bestaan uit een titel, een pictogram en een PendingIntent
. Je kunt ook markeren SliceActions
zoals primaire acties, welke trigger wanneer de gebruiker ergens op de rij van dat segment tikt.
U definieert de lay-out van een segment door een ListBuilder
, een rij toevoegen en vervolgens items aan die rij toevoegen. Hier gebruik ik bijvoorbeeld ListBuilder
en rij toevoegen
een plak maken die bestaat uit een titel en een ondertitel:
import android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider import androidx.slice.builders.ListBuilder import androidx.slice.builders.ListBuilder.INFINITY class MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true onderdrukt plezier opBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path when (path) "/ launchMainActivity" -> return createSlice (sliceUri) return null fun createSlice (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, INFINITY) .addRow it .apply setTitle ("Dit is een titel") setSubtitle ("Dit is een ondertitel") .build ()
U kunt een combinatie van verschillende inhoudstypen weergeven in dezelfde rij, zoals tekst, acties en pictogrammen.
Laten we dit nu allemaal toepassen op ons project en een segment maken waarmee onze toepassingen worden gestart Hoofdactiviteit
wanneer getikt.
Open de MySliceProvider
klasse, en voeg het volgende toe:
import android.app.PendingIntent import android.content.Intent import android.net.Uri import androidx.core.graphics.drawable.IconCompat import androidx.slice.Slice import androidx.slice.SliceProvider import androidx.slice.builders.ListBuilder import androidx .slice.builders.SliceAction // Uitbreiden van SliceProvider // class MySliceProvider: SliceProvider () // Initialiseer je slice-provider // override-fun onCreateSliceProvider (): Boolean return true // Bouw het segment // override-fun opBindSlice ( sliceUri: Uri): Slice? // Controleer het URI-pad // val path = sliceUri.path when (pad) // Definieer de URI van het segment; Ik gebruik 'launchMainActivity' // "/ launchMainActivity" -> return createSlice (sliceUri) return null fun createSlice (sliceUri: Uri): Slice val activityAction = createActivityAction () // Maak de ListBuilder, die we zullen gebruiken gebruik om rijen toe te voegen aan onze slice // val listBuilder = ListBuilder (context !!, sliceUri, ListBuilder.INFINITY) // Construeer de rijen met behulp van RowBuilder // val rowBuilder = ListBuilder.RowBuilder (listBuilder) // Stel de titeltekst in // .setTitle ("Open MainActivity.") // Stel de primaire actie van de rij in // .setPrimaryAction (activityAction) // Voeg de rij toe aan de ListBuilder // listBuilder.addRow (rowBuilder) // Bouw de lijst // return listBuilder.build () fun createActivityAction (): SliceAction val intent = Intent (context, MainActivity :: class.java) retourneer SliceAction (PendingIntent.getActivity (context, 0, intent, 0), IconCompat.createWithResource (context !!, R. drawable.ic_home), "Open MainActivity")
Als u uw segmenten op de proef wilt stellen, hebt u ten minste één toepassing nodig die segmenten kan weergeven.
Plakjes zullen naar verluidt later dit jaar hun debuut maken in de Google-zoekopdracht, maar op het moment van schrijven moest deze functie nog worden uitgerold. Momenteel is de enige manier om segmenten te testen de installatie van de Slice Viewer-app van Google, die is ontworpen om te emuleren hoe segmenten uiteindelijk worden weergegeven in Google Zoeken.
Om Slice Viewer op een Android Virtual Device (AVD) te installeren:
Om Slice Viewer op een fysieke smartphone of tablet te installeren:
CD
) zodat de opdrachtprompt of terminal naar uw map met Android / sdk / platform-tools verwijst, bijvoorbeeld, hier is mijn opdracht:cd / Gebruikers / jessicathornsby / Bibliotheek / Android / sdk / platform-tools
adb installeren
commando om de APK naar je Android-apparaat te duwen:./ adb installeer slice-viewer.apk
Vervolgens moet u een run-configuratie maken die de unieke URI van uw slice doorgeeft aan uw AVD- of Android-apparaat.
De eerste keer dat Slice Viewer probeert uw segment weer te geven, vraagt het toestemming om toegang te krijgen tot de unieke URI van uw slice. Tik Toestaan en navigeer door het permissiedialoogvenster en uw segment moet op het scherm verschijnen.
Om te communiceren met de SliceAction
, Klik op de Open MainActivity knop, en het segment antwoordt door uw applicaties te starten Hoofdactiviteit
.
SliceAction
Waarom zou je jezelf beperken tot één SliceAction
, wanneer je kunt hebben meerdere SliceActions
? In dit gedeelte gaan we er twee implementeren SliceActions
, waar elke actie een andere start Activiteit
. Ik ga ook een paar nieuwe UI-elementen introduceren, door een ondertitel toe te voegen en enkele einde items naar onze slice.
Laten we de installatie uit de weg ruimen en een seconde maken Activiteit
dat is onze tweede SliceAction
kan linken naar.
Selecteer eerst nieuwe > Kotlin-bestand / klasse van de Android Studio-werkbalk. Open in het nieuwe dialoogvenster de Soort dropdown en selecteer Klasse. Geef deze les een naam SecondActivity
, en klik vervolgens op OK.
Open nu je SecondActivity
klasse en voeg het volgende toe:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class SecondActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) setContentView (R.layout.activity_second)
Selecteer vervolgens nieuwe > Android-bronbestand van de Android Studio-werkbalk. Open in het volgende venster de Resource type dropdown, en selecteer lay-out. Geef dit bestand een naam activity_second
, en klik OK.
Open nu dit layoutbestand en voeg de volgende code toe:
http://schemas.android.com/apk/res/android "xmlns: app =" http://schemas.android.com/apk/res-auto "xmlns: tools =" http://schemas.android. com / tools "android: layout_width =" match_parent "android: layout_height =" match_parent "tools: context =". MainActivity ">
Open het Manifest van je project en verklaar dit SecondActivity
:
Einditems kunnen een tijdstempel, een afbeelding of een zijn SliceAction
, maar zoals de naam doet vermoeden, verschijnen ze altijd aan het einde van een rij. U kunt meerdere einditems toevoegen aan één rij, hoewel er, afhankelijk van de beschikbare ruimte, geen garantie is dat al uw einditems aan de gebruiker worden weergegeven.
We zullen onze maken SliceActions
als pictogrammen, dus u moet twee nieuwe tekstrappen toevoegen aan uw project:
Herhaal de bovenstaande stappen om een pictogram voor uw te maken Start SecondActivity plak actie. Voor mijn tweede eindproduct gebruik ik de telefoontje pictogram en benoemen ic_call.
We zijn nu klaar om een seconde toe te voegen SliceAction
naar de MySliceProvider
klasse:
import android.app.PendingIntent import android.content.Intent import android.net.Uri import androidx.core.graphics.drawable.IconCompat import androidx.slice.Slice import androidx.slice.SliceProvider import androidx.slice.builders.ListBuilder import androidx .slice.builders.SliceAction class MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true override fun onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path when (path) "/ launchMainActivity" -> return createSlice (sliceUri) return null fun createSlice (sliceUri: Uri): Slice val activityAction = createActivityAction () IconCompat.createWithResource (context !! , R.drawable.ic_home) .toIcon () val activityAction2 = createSecondActivityAction () IconCompat.createWithResource (context !!, R.drawable.ic_call) .toIcon () // Constructeer de parent builder // val listBuilder = ListBuilder (context! !, sliceUri) // Bouw de builder voor de rij // val myRow = ListBuilder.RowBuilder (listBuilder) .setTitle ("Start MainActivity.") .setSubtitle ("Dit is een ondertitel") // Voeg de acties toe die we ' Ik gebruik als einditems // myRow.addEndItem (activityAction) myRow.addEndItem (activityAction2) // Voeg de rij toe aan de bovenliggende builder // listBuilder.addRow (myRow) // Bouw de slice // return listBuilder.build () fun createActivityAction (): SliceAction val intent = Intent (context, MainActivity :: class.java) retourneert SliceAction (PendingIntent.getActivity ( context, 0, intent, 0), IconCompat.createWithResource (context !!, R.drawable.ic_home) .toIcon (), "Start MainActivity") fun createSecondActivityAction (): SliceAction val intent = Intent (context, SecondActivity: : class.java) retourneer SliceAction (PendingIntent.getActivity (context, 0, intent, 0), IconCompat.createWithResource (context !!, R.drawable.ic_call) .toIcon (), "Launch SecondActivity")
Omdat we de URI niet hebben gewijzigd, hoeven we geen nieuwe configuratie van de run te maken, wat betekent dat het testen van dit segment net zo eenvoudig is als het selecteren Rennen > sliceConfig van de Android Studio-werkbalk.
Je kunt dit project downloaden van de tutorial GitHub repo.
Tot nu toe hebben we al onze segmenten geconstrueerd met alleen rijen, maar u kunt ook segmenten maken met behulp van rooster rijen en cellen.
In deze laatste sectie gaan we een segment maken dat bestaat uit een titel, een ondertitel en een enkele rij verdeeld in drie cellen. Elke cel heeft een eigen titel, een hoofdtekst en een afbeelding en elke cel voert een unieke actie uit wanneer erop wordt getikt.
Als u uw segment in een raster wilt opmaken, moet u:
ListBuilder
.ListBuilder
, gebruik makend van addGridRow
. addCell
. Elke rij kan maximaal vijf cellen weergeven.U kunt vervolgens inhoud aan elke cel toevoegen, zoals:
addTitleText
.Voeg tekst toe
.Voeg afbeelding toe
. Elke celafbeelding moet een van de volgende kenmerken hebben: LARGE_IMAGE
, small_image
, of ICON_IMAGE
. SliceAction
. Om dit voorbeeld duidelijk te houden, tikt u op elke cel om een artikel in de standaardbrowser van het apparaat te laden, maar als u een meer authentieke plakervaring wilt, kunt u de setContentIntent
code. Ik zal enkele afbeeldingen in mijn raster opnemen, dus u moet ten minste één aantrekbaar toevoegen aan uw project. Ik gebruik het Kotlin-logo, maar je kunt elke afbeelding pakken en deze in je project laten vallen Tekenbaar map.
Nu bent u klaar om de. Te openen MySliceProvider
klasse en bouw je rooster:
import android.app.PendingIntent import android.content.Context import android.content.Intent import android.net.Uri import androidx.core.graphics.drawable.IconCompat import androidx.slice.Slice import androidx.slice.SliceProvider import androidx.slice .builders.ListBuilder-klasse MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true override-fun onBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path when (path) "/ launchMainActivity" -> return createSliceWithGridRow (sliceUri) return null fun createSliceWithGridRow (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, ListBuilder.INFINITY) .setHeader it.apply setTitle ("Wil je Kotlin voor Android leren leren?") setSubtitle ("Bekijk deze artikelen!") // Voeg een rasterrij toe aan de lijstbouwer // .addGridRow it.apply / / Voeg een cel toe aan de rij // addCell it.apply // Voeg inhoud toe aan uw cel // addTitleText ("Java vs. Kotlin") addText ("Deel 1") addImage (IconCompat.createWithResource (context, R. drawable.kotlin), ListBuilder.LARGE_IMAGE) // Geef de intentie op die moet worden geactiveerd wanneer de gebruiker interactie heeft met deze cel // .setContentIntent (loadArticlePendingIntent (context, "https://code.tutsplus.com/articles/java-vs- kotlin-should-you-be-using-kotlin-for-android-ontwikkeling ...) addCell it.apply addTitleText ("Codering in Kotlin") addText ("Part 2") addImage (IconCompat.createWithResourc e (context, R.drawable.kotlin), ListBuilder.LARGE_IMAGE) .setContentIntent (loadArticlePendingIntent (context, "https://code.tutsplus.com/tutorials/start-developing-android-apps-with-kotlin-part-1 --cms-27827? _ga = ...) addCell it.apply addTitleText ("Lambdas & NPE") addText ("Part 3") addImage (IconCompat.createWithResource (context, R.drawable.kotlin), ListBuilder. LARGE_IMAGE) .setContentIntent (loadArticlePendingIntent (context, "https://code.tutsplus.com/articles/coding-functional-android-apps-in-kotlin-lambdas-null-safety-more...) .build ( ) private fun loadArticlePendingIntent (context: Context, url: String) = PendingIntent.getActivity (context, 0, Intent (Intent.ACTION_VIEW) .apply data = Uri.parse (url), 0)
Je kunt de volledige code voor dit project vinden in onze GitHub-repo.
Voer deze app uit op uw AVD of fysieke Android-apparaat en probeer interactie te hebben met elk item in het raster. Elke cel moet linken naar een ander artikel.
De manier waarop de inhoud van uw slice wordt weergegeven, kan variëren, afhankelijk van de mode de hosttoepassing is geconfigureerd voor. Om ervoor te zorgen dat uw segmenten er goed uitzien en correct werken, ongeacht de hosttoepassing, moet u uw slices testen in alle verschillende slice-modi.
Omdat onze rastergrootte aanzienlijk meer inhoud heeft dan de vorige plakken, is dit de beste kandidaat om de verschillen tussen deze verschillende plakmodi te illustreren.
Als u uw slice wilt testen, klikt u op het kleine pictogram in de rechterbovenhoek van de Slice Viewer en doorloopt u de volgende modi:
In dit formaat geeft Android zoveel mogelijk rijen weer in de beschikbare ruimte. Dit is de modus die Slice Viewer standaard gebruikt.
In deze modus wordt uw segment weergegeven door een pictogram en een label.
Als er een primaire header is gekoppeld aan uw SliceAction
, dan zal dit worden gebruikt als het pictogram van je schijf. Als er geen pictogram beschikbaar is, geeft Android in plaats daarvan de primaire actie weer die is gekoppeld aan de eerste rij van uw segment, die in dit geval ons Kotlin-tekenbaar is.
Als u het pictogram wilt wijzigen dat wordt weergegeven in de snelkoppelingsmodus, voegt u een tweede tekenbaar toe aan uw project en werkt u het volgende gedeelte van de slice-provider bij:
.addGridRow it.apply addCell it.apply addTitleText ("Java vs. Kotlin") addText ("Deel 1") // Verwijzing naar de nieuwe tekenbare // addImage (IconCompat.createWithResource (context, R.drawable.androidlogo) , ListBuilder.LARGE_IMAGE)
De modus Klein heeft een beperkte hoogte en geeft een enkele weer SliceItem
of een beperkte verzameling items als één rij met inhoud. Als uw slice een header heeft, wordt dit weergegeven, wat precies is wat er met onze slice gebeurt.
Het wijzigen van de titel of de ondertitel heeft invloed op de inhoud die wordt weergegeven in de kleine modus.
fun createSliceWithGridRow (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, ListBuilder.INFINITY) .setHeader it.apply setTitle ("Dit is de titel") setSubtitle ("Dit is de ondertitel")
Als uw segment geen koptekst bevat, wordt de eerste rij van het segment weergegeven.
Zodra u hebt geleerd hoe u een nieuwe functie kunt implementeren, leert u hoe u dezelfde resultaten kunt behalen, met minder code!
Android KTX is een verzameling modules die bestaat uit extensies die het Android-platform voor Kotlin optimaliseren. De Slice Builders KTX-module van Android KTX verpakt het bouwerspatroon in een Kotlin-vriendelijke DSL waarmee u uw plakjes op een meer beknopte, voor de mens leesbare manier kunt maken. Om aan de slag te gaan met Slice Builders KTX, vervangt u de volgende afhankelijkheid:
implementatie 'androidx.slice: slice-builders: 1.0.0-alpha3'
Met:
implementatie 'androidx.slice: slice-builders-ktx: 1.0.0-alpha3'
U kunt vervolgens uw createSlice
methode om deze DSL te gebruiken. Hier is bijvoorbeeld een eenvoudig segment met een titel en een ondertitel:
import android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider import androidx.slice.builders.ListBuilder import androidx.slice.builders.ListBuilder.INFINITY class MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true onderdrukt plezier opBindSlice (sliceUri: Uri): Slice? val path = sliceUri.path when (path) "/ launchMainActivity" -> return createSlice (sliceUri) return null fun createSlice (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, INFINITY) .addRow it .apply setTitle ("Dit is een titel") setSubtitle ("Dit is een ondertitel") .build ()
Met behulp van de DSL wordt dit:
import android.net.Uri import androidx.slice.Slice import androidx.slice.SliceProvider import andro