Codificați primul tău fel de aplicație Android și păstrați-i pe utilizatori implicați

Munca grea nu sa terminat doar pentru că aplicația dvs. a înregistrat o mulțime de descărcări și recenzii pozitive în magazinul Google Play. Utilizatorul tău mobil obișnuit are zeci de aplicații instalate pe dispozitivul lor și cu aplicații noi lansate tot timpul, va trebui să depuneți eforturi pentru a vă menține interesul publicului!

Păstrarea utilizatorilor înapoi în aplicația dvs. este crucial la crearea unei baze stabile de utilizatori loiali. În plus, dacă ați generat bani din aplicația dvs., atunci timpul petrecut de utilizatori în aplicația dvs. afectează în mod direct cât de mulți bani faceți - gândiți-vă la fiecare secundă suplimentară, ca o altă ocazie de a afișa un anunț sau de a ispiti utilizatorul să se strecoare -app achiziție!

La I / O din acest an, Google a introdus felii, o caracteristică nouă care promite să aducă utilizatorii înapoi la aplicația dvs., obținând caracteristicile și conținutul aplicației în fața acestora în momentul în care acestea sunt necesare cel mai mult. 

Cu felii care se modelează pentru a fi un instrument important pentru păstrarea publicului, acum este momentul potrivit pentru a obține o experiență reală cu această caracteristică Android actualizată. Până la sfârșitul acestui articol, ați creat o serie de felii, dintr-o felie simplă care lansează o activitate când este accesată pe mai multe feluri mai complexe, constând din pictograme, imagini, grile și multiple SliceActions

Slices: Mai multe moduri în care utilizatorii să se bucure de aplicația dvs. 

Similar cu widget-urile, feliile sunt fragmente de conținut care apar în afara contextului aplicației, mărind vizibilitatea aplicației dvs. și oferindu-vă mai multe oportunități de implicare a publicului. 

Sectiunile au potentialul de a mari vizibilitatea aplicatiei dvs., Google promisiunea de a adauga suport pentru felii in zonele in care multi utilizatori Android petrec o perioada semnificativa de timp, incluzand cautare Google si Asistentul Google. Deoarece fac parte din Android Jetpack, feliile sunt compatibile cu Android 4.4 și versiuni ulterioare, ceea ce înseamnă că felii dvs. au potențialul de a ajunge la 95% din toți utilizatorii de Android. 

Așa că felii au multe de oferit - dar cum funcționează? 

În prezent, dacă efectuați o căutare în aplicația Google, atunci Google ar putea sugera o aplicație relevantă instalată pe dispozitiv. De exemplu, dacă ați instalat Facebook pentru mobil, tastați Facebook va aduce o legătură directă cu aplicația Facebook.

Slice-urile iau această aplicație într-un pas înainte, concentrându-se pe anumite sarcini pe care utilizatorul ar putea să le efectueze în cadrul aplicațiilor pe care le-au instalat deja.

Să examinăm un exemplu: imaginați-vă că ați instalat o aplicație Book A Hotel care vă permite să căutați un hotel și să vă rezervați o cameră. Când tastați Hoteluri Londra în Google, întâlniți rezultatele obișnuite ale căutării, plus o felie din aplicația Book A Hotel. Această secțiune recomandă un hotel din Londra și afișează informații cum ar fi numele și adresa hotelului, la care se adauga A SliceAction, sub forma unui buton care vă permite să rezervați o cameră direct din interfața cu utilizatorul (UI). 

Pentru utilizator, această secțiune a oferit un acces ușor la informațiile și caracteristicile necesare în momentul respectiv. Pentru dezvoltator, această secțiune le-a permis să obțină aplicația lor în fața unui utilizator exact în momentul în care au avut cea mai mare șansă de reutilizare reușită.

Cum creez primul meu feliu? 

Să începem prin a crea o felie simplă care, atunci când va fi utilizată, va lansa aplicația noastră Activitate principala.

Această tehnică simplă face posibilă începerea oricărei sarcini, direct de la interfața cu felii. În exemplul Hotel Book A, am putea doar să conectăm butonul la aplicațiile aferente BookRoomActivity, care ar fi o modalitate simplă, dar eficientă de a reduce numărul de ecrane pe care utilizatorul trebuie să navigheze pentru a finaliza această sarcină. 

Pentru a începe, creați un nou proiect Android. Puteți utiliza orice setări doriți, dar asigurați-vă că selectați Includeți suportul Kotlin la cerere. 

Odată ce ați creat proiectul, deschideți fișierul build.grade și adăugați slice-core și slice-constructor dependențe:

dependencies implementarea 'androidx.appcompat: appcompat: 1.0.0-alpha3' implementare 'androidx.slice: slice-core: 1.0.0-alpha3' implementare 'androidx.slice: slice-builders: androidx.constraintlayout: constraintlayout: 1.1.0 "implementare" org.jetbrains.kotlin: kotlin-stdlib-jdk7: $ kotlin_version "

Afișarea conținutului aplicației dvs. în Căutarea Google, cu furnizorii de felii

Apoi, trebuie să creați o slice furnizor, care este componenta responsabilă pentru afișarea conținutului aplicației în afara contextului aplicației. 

Creați un furnizor de felii utilizând șablonul furnizor de felii Android Studio:

  • Selectați Nou > Alte > Slice Provider din bara de instrumente Android Studio. 
  • Introduceți numele MySliceProvider.
  • Seteaza Limba-sursă la Kotlin.
  • Clic finalizarea.
  • Deschide MySliceProvider clasă și ar trebui să vedeți următorul cod generat automat: 
importați android.content.ContentResolver importați android.content.Intent importați șiroidroid.Uri Import și androidx.slice.Slice de import androidx.slice.SliceProvider de import și clasa Android.slice.builders.ListBuilder MySliceProvider: SliceProvider () override fun onCreateSliceProvider () : Boolean return true suprascrie distracția onMapIntentToUri (intent: Intent?): Schema (ContentResolver.SCHEME_CONTENT) if (intent == null) return uriBuilder.build () val data = intent.data dacă (date! = null && data.path! = null) val cale = data.path.replace ("/", "") uriBuilder = uriBuilder.path dacă context! = null) uriBuilder = uriBuilder.authority (context.getPackageName ()) întoarce uriBuilder.build () // Construiește slice // suprascris fun onBindSlice (sliceUri: Uri): Slice? val context = getContext ()?: întoarcere null return dacă (sliceUri.path == "/") // Personalizați Slice // ListBuilder (context, sliceUri) .addRow it.setTitle  .build () else ListBuilder (context, sliceUri) .addRow it.setTitle ("URI nu a fost găsit.") .build () // Abonare la o sursă de date, (sliceUri: Uri?)  // Evitati scurgeri de memorie prin dezabonarea din sursa de date si eliminand orice observatori // suprascrie fun onSliceUnpinned (sliceUri: Uri?) 

Dacă vă creați furnizorul de felie folosind Nou > Alte > Slice Provider, apoi Android Studio va adăuga, de asemenea, furnizorul necesar pentru manifestarea dvs.: 

        

Această intrare vă asigură că felia dvs. poate fi descoperită de alte aplicații.  

S-a eșuat sincronizarea proiectului la gradul dvs.?

Până acum, am folosit doar codul pe care Android Studio la generat automat, dar proiectul dvs. poate deja refuză să compileze! 

Bug-uri, lipsă de funcționalitate și comportament ciudat sunt doar o parte din distracția de a lucra cu lansări timpurii. La momentul scrierii, generarea unui furnizor de felie ar adăuga uneori inexplicabil un nou set de dependențe de proiectul tău build.gradle fişier. 

implementarea "androidx.slice: slices-core: 1.0.0-alpha1" implementare "androidx.slice: slices-builders: 1.0.0-alpha1 '

Nu numai că aceste dependențe sunt inutile - sunt gresit. Deși este ușor să ratați, comparați: 

implementare "androidx.slice: felii-core: 1.0.0-alpha3 '

Cu dreptate:

implementare "androidx.slice: slice-core: 1.0.0-alpha1 '

Un singur s poate însemna diferența dintre o aplicație funcțională și un proiect care refuză să compileze. Este posibil ca acest bug să fie adresat înainte de lansarea oficială a feliilor, dar dacă Android Studio începe să se plângă de dependențe nerezolvate, atunci verificați-vă build.gradle fișier pentru a vedea dacă acest lucru sa întâmplat în proiectul dvs.. 

Construirea unui segment: URI, SliceActions, și planurile de plantare

Pentru a transforma codul de boilerplate al furnizorului de felii într-o felie funcțională, trebuie să efectuăm mai multe modificări:

1. Definirea unui URI

Fiecare felie are un URI unic și este sarcina furnizorului de felii de a furniza maparea între acest URI și felia corespunzătoare. 

Aplicațiile care sunt capabile să afișeze o felie sunt cunoscute sub numele de aplicații gazdă. De fiecare dată când o gazdă are nevoie să afișeze o felie, trimite o solicitare obligatorie furnizorului de felii cu URI-ul unei felii pe care o caută. Furnizorul dvs. de felie va verifica URI-ul și va returna fragmentul corespunzător.

În fragmentul următor, onBindSlice metoda verifică pentru / myURI calea și returnarea unei felii care afișează o Salut Lume mesaj.

clasa MySliceProvider: SliceProvider () override fun peCreateSliceProvider (): Boolean return true suprascrie distracția onBindSlice (sliceUri: Uri): Slice? return dacă sliceUri.path == "/ myURI") ListBuilder (context, sliceUri, ListBuilder.INFINITY) .addRow it.setTitle ("Hello World").

2. Asigurați-vă Slice Interactive 

In timp ce tu ar putea creați o felie care afișează pur și simplu unele informații, dacă doriți ca feliul dvs. să fie interactiv, atunci va trebui să creați una sau mai multe SliceActions

A SliceAction poate consta dintr-un titlu, o icoană și o PendingIntent. Puteți, de asemenea, marca SliceActions la fel de acțiuni primare, care declanșează ori de câte ori utilizatorul întrerupe oriunde pe rândul acelei părți. 

3. Construiți UI-ul Slice  

Definiți aspectul unei felii prin implementarea unui a ListBuilder, adăugând un rând și apoi adăugând elemente la rândul respectiv. De exemplu, aici folosesc ListBuilder și addRow pentru a crea o felie care conține un titlu și o subtitrare: 

importul android.Uri import androidx.slice.Slice de import androidx.slice.SliceProvider de import șiroidx.slice.builders.ListBuilder de import androidx.slice.builders.ListBuilder.INFINITY clasa MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true suprascrie distracția onBindSlice (sliceUri: Uri): Slice? cale path = sliceUri.path atunci când (calea) "/ launchMainActivity" -> returnare createSlice (sliceUri) return null distracție createSlice (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, INFINITY) .apply setTitle ("Acesta este un titlu") setSubtitle ("Aceasta este o subtitrare") .build ()

Puteți afișa un amestec de tipuri diferite de conținut în același rând, cum ar fi textul, acțiunile și pictogramele. 

Construiți-vă primul tău fel de funcțional Android 

Acum, să aplicăm toate aceste lucruri proiectului nostru și să creați o felie care să lanseze aplicația noastră Activitate principala când a fost lovit. 

Deschide MySliceProvider clasă și adăugați următoarele: 

importand android.app.PendingIntent de import android.content.Intent de import android.Uri de import androidx.core.graphics.drawable.IconCompat de import androidx.slice.Slice de import androidx.slice.SliceProvider de import androidx.slice.builders.ListBuilder import androidx .slice.builders.SliceAction // Extinde din SliceProvider // clasa MySliceProvider: SliceProvider () // Initializeaza furnizorul de felii // suprascrie distractia onCreateSliceProvider (): Boolean return true // Construieste slice // override fun onBindSlice ( sliceUri: Uri): Slice? // Verificați calea URI // val path = sliceUri.path când (calea) // Definiți URI-ul felului; Folosesc "launchMainActivity" // "/ launchMainActivity" -> retur creaSlice (sliceUri) return null distractie createSlice (sliceUri: Uri): Slice val activityAction = createActivityAction () // Creati ListBuilder pentru a adăuga rânduri la felia noastră // val listBuilder = ListBuilder (context !!, sliceUri, ListBuilder.INFINITY) // Construiți rândurile folosind RowBuilder // val rowBuilder = ListBuilder.RowBuilder (listBuilder) // Setați textul titlului // .setTitle ("Open MainActivity.") // Setați acțiunea primară a rândului // .setPrimaryAction (activityAction) // Adăugați rândul în ListBuilder // listBuilder.addRow (rowBuilder) // Construiți lista // lista de returnareBuilder.build ()) SliceAction (context, 0, intent, 0), IconCompat.createWithResource (context !!, R. drawable.ic_home), "Open MainActivity")

Testarea tău felii: Instalarea vizualizatorului de felii 

Dacă veți încerca felii, atunci veți avea nevoie de cel puțin o aplicație capabilă să afișeze felii. 

Slices va face debutul în căutarea Google mai târziu în acest an, dar la momentul redactării, această caracteristică nu a fost încă lansată. În prezent, singura modalitate de a testa felii este să instalați aplicația Google Slice Viewer, care este proiectată să emuleze felul în care felii vor apărea în cele din urmă în căutarea Google.

Pentru a instala Slice Viewer pe un dispozitiv virtual Android (AVD):

  • Descărcați aplicația Google Slice Viewer.
  • Asigurați-vă că AVD-ul dvs. funcționează.
  • Găsiți fișierul APK Slice Viewer și trageți-l și plasați-l pe AVD.

Pentru a instala Slice Viewer pe un smartphone sau tabletă fizică: 

  • Descărcați aplicația Slice Viewer.
  • Asigurați-vă că telefonul inteligent sau tableta dvs. sunt atașate la mașina dvs. de dezvoltare.
  • Deplasați APK-ul Slice Viewer pe computerul dvs. Android / sdk / platformă unelte pliant.
  • Deschideți fereastra Prompt Command (Windows) sau Terminal (Mac). 
  • Schimbați directorul (CD), astfel încât linia de comandă sau terminalul să indice folderul Android / sdk / platform-tools - de exemplu, aici este comanda mea:
cd / Utilizatori / jessicathornsby / Library / Android / sdk / platform-tools
  • Rulați comanda apăsând pe introduce cheie de pe tastatură.
  • Folosește adb install comanda pentru a împinge APK pe dispozitivul Android:
./ adb instalează slice-viewer.apk

Crearea unei configurații de rulare URI 

Apoi, va trebui să creați o configurație de executare care să treacă URI-ul unic al felii în AVD sau pe dispozitivul Android. 

  • Selectați Alerga > Editați configurațiile ... din bara de instrumente Android Studio.
  • Apasă pe + și apoi selectați Aplicația Android.
  • Dă configurația de execuție un nume. eu folosesc sliceConfig
  • Deschide Modul dropdown și apoi selectați aplicaţia.
  • Deschide Lansa dropdown și apoi selectați URL-.
  • Introduceți URL-ul felului în format felie conținut: // nume-pachet / felie-URL. De exemplu, adresa URL a felii mele este: felie conținut: //com.jessicathornsby.kotlinslices/launchMainActivity.
  • Clic O.K.
  • Selectați Alerga > Rulați sliceConfig din bara de instrumente Android Studio, apoi selectați dispozitivul Android.

Prima dată când Slice Viewer încearcă să vă afișeze felia, va cere permisiunea de a accesa URI-ul unic al felii. Atingeți Permite și navigați în dialogul permisiunilor, iar felia dvs. ar trebui să apară pe ecran.

Pentru a interacționa cu SliceAction, apasă pe Deschide MainActivity butonul și raza va răspunde prin lansarea aplicației Activitate principala

Obțineți mai mult din felii: adăugați o secundă SliceAction 

De ce să vă limitați la una SliceAction, când poți avea multiplu SliceActions? În această secțiune, vom implementa două SliceActions, unde fiecare acțiune lansează o altă acțiune Activitate. De asemenea, voi introduce câteva elemente noi ale UI, adăugând o subtitrare și altele elemente finale la felia noastră. 

Creați o secțiune secundară

Să terminăm instalarea și să creăm o secundă Activitate că a doua noastră SliceAction se poate conecta la. 

Mai întâi, selectați Nou > Fișier / clasă Kotlin din bara de instrumente Android Studio. În fereastra de dialog nouă, deschideți Drăguț dropdown și selectați Clasă. Denumiți această clasă SecondActivity, apoi faceți clic pe O.K

Deschide-ți acum SecondActivity și adăugați următoarele:

importand android.appcompat.app.AppCompatActivity importați android.os.Bundle class SecondActivity: AppCompatActivity () suprascris fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) setContentView (R.layout.activity_second)

Apoi, selectați Nou > Fișier de resurse Android din bara de instrumente Android Studio. În fereastra următoare, deschideți fereastra Tipul de resurse dropdown și selectați schemă. Denumiți acest fișier activity_second, și faceți clic pe O.K

Deschideți acum acest fișier de aspect și adăugați următorul cod:

 http://schemas.android.com/apk/res/android "xmlns: app =" http://schemas.android.com/apk/res-auto "xmlns: tools =" http://schemas.android. com / tools "și Android: layout_width =" match_parent "android: layout_height =" Match_parent "instrumente: context =".  

Deschideți Proiectul Manifest, și declarați acest lucru SecondActivity:

Construirea unor interfețe complexe mai complexe: Elemente de încheiere a planului 

Elementele finale pot fi fie o marcă de timp, o imagine, fie o imagine SliceAction, dar, după cum sugerează și numele, ele apar întotdeauna la sfârșitul unui rând. Puteți adăuga mai multe elemente finale într-un singur rând, deși, în funcție de spațiul disponibil, nu există nicio garanție că toate elementele finale vor fi afișate utilizatorului. 

Vom crea noi SliceActions ca icoane, deci va trebui să adăugați două proiecte de desenare noi pentru proiectul dvs.:

  • Selectați Nou > Asset imagine din bara de instrumente Android Studio.
  • Faceți clic pe micul Clip art (aceasta afișează în mod implicit o imagine a unui dispozitiv Android).
  • Selectați pictograma pe care doriți să o utilizați pentru dvs. Lansați MainActivity element final. Eu folosesc Acasă icoană.
  • Dați acestei pictograme numele ic_home, apoi faceți clic pe Următor →.
  • Citiți informațiile de pe ecran și, dacă sunteți bucuroși să continuați, faceți clic pe finalizarea.

Repetați pașii de mai sus pentru a crea o pictogramă pentru dvs. Lansați secțiunea SecondActivity felie acțiune. Pentru al doilea element final, folosesc apel pictograma și denumirea acesteia ic_call.

Crearea celei de-a doua SliceAction

Acum suntem gata să adăugăm o secundă SliceAction la MySliceProvider clasă: 

importand android.app.PendingIntent de import android.content.Intent de import android.Uri de import androidx.core.graphics.drawable.IconCompat de import androidx.slice.Slice de import androidx.slice.SliceProvider de import androidx.slice.builders.ListBuilder import androidx .slice.builders.SliceAction class MySliceProvider: SliceProvider () suprascris fun onCreateSliceProvider (): Boolean return true suprascrie fun onBindSlice (sliceUri: Uri): Slice? wave path = sliceUri.path atunci când (calea) "/ launchMainActivity" -> returnează createSlice (sliceUri) întoarce null distracție createSlice (sliceUri: Uri): Slice val activityAction = createActivityAction () IconCompat.createWithResource , R.drawable.ic_home) .toIcon () val activitateAction2 = createSecondActivityAction () IconCompat.createWithResource (context !!, R.drawable.ic_call) .toIcon () // Construi constructorul părinte // val listBuilder = ListBuilder (context! !, sliceUri) // Construiește constructorul pentru rândul // val myRow = ListBuilder.RowBuilder (listBuilder) .setTitle ("Launch MainActivity.") .setSubtitle ("Aceasta este o subtitrare") // Adăugați acțiunile pe care le " voi folosi ca elemente finite // myRow.addEndItem (activityAction) myRow.addEndItem (activityAction2) // Adăugați rândul la constructorul părinte // listBuilder.addRow (myRow) // Construiți felia // lista de returnareBuilder.build ()  fun createActivityAction (): SliceAction val intent = Intent (context, MainActivity :: class.java) retur SliceAction (PendingIntent.getActivity ( ()) , , , : class.java) retur SliceAction (PendingIntent.getActivity (context, 0, intent, 0), IconCompat.createWithResource (context !!, R.drawable.ic_call) .toIcon (), "Launch SecondActivity")

Deoarece nu am schimbat URI-ul, nu este nevoie să creați o nouă configurare de execuție, ceea ce înseamnă că testarea acestei secțiuni este la fel de simplă precum selectarea Alerga > sliceConfig din bara de instrumente Android Studio. 

Puteți descărca acest proiect din GitHub repo tutorial. 

Slice-uri multimedia: Crearea layout-urilor de rețea

Până în acest moment, am construit toate feliile noastre folosind numai rânduri, dar puteți și să construiți felii folosind grilă rânduri și celule. 

În această secțiune finală, vom crea o felie compusă dintr-un titlu, o subtitrare și un singur rând împărțit în trei celule. Fiecare celulă va avea propriul titlu, un text corporal și o imagine și fiecare va efectua o acțiune unică atunci când este apăsată. 

Pentru a vă așeza felia într-o rețea, trebuie să: 

  • Implementați a ListBuilder.
  • Adăugați un rând la grilă ListBuilder, utilizând addGridRow
  • Adăugați celule la rând folosind addCell. Fiecare rând poate afișa maximum cinci celule.

Apoi puteți adăuga conținut în fiecare celulă, cum ar fi: 

  • Un titlu, pe care îl adăugați utilizând addTitleText.
  • Textul corpului, folosind adaugă text.
  • Imaginile pe care le creați folosind adauga imagine. Fiecare imagine celulară trebuie să aibă unul dintre următoarele atribute: LARGE_IMAGE, SMALL_IMAGE, sau ICON_IMAGE
  • O intenție de conținut, care este aproximativ echivalentă cu a SliceAction. Pentru a vă ajuta să păstrați acest exemplu simplu, atingând fiecare celulă va încărca pur și simplu un articol în browserul implicit al dispozitivului, dar dacă preferați o experiență mai autentică a felii, puteți schimba setContentIntent cod. 

Voi include câteva imagini în grila mea, deci va trebui să adăugați cel puțin un proiect care poate fi desenat. Folosesc logo-ul Kotlin, dar poți apuca orice imagine și pune-o în proiectul tău drawable pliant. 

Acum, sunteți gata să deschideți MySliceProvider clasați și construiți grila: 

importand android.app.PendingIntent de import android.content.Context de import android.content.Intent de import android.net.Uri de import androidx.core.graphics.drawable.IconCompat de import androidx.slice.Slice de import androidx.slice.SliceProvider de import androidx.slice .builders.ListBuilder clasa MySliceProvider: SliceProvider () suprascris fun onCreateSliceProvider (): Boolean return true suprascrie fun onBindSlice (sliceUri: Uri): Slice? path path = sliceUri.path atunci când (calea) "/ launchMainActivity" -> returnează createSliceWithGridRow (sliceUri) întoarce null fun createSliceWithGridRow (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, ListBuilder.INFINITY) it.apply setTitle ("Vreți să începeți să învățați Kotlin pentru Android?") setSubtitle ("Verificați aceste articole!") // Adăugați un rând de grilă în lista de constructori //addGridRow it.apply  / Adăugați o celulă la rând // addCell it.apply // Adăugați conținut în celulă // addTitleText ("Java vs. Kotlin") addText ("Partea 1") addImage (IconCompat.createWithResource (context, R. drawable.kotlin), ListBuilder.LARGE_IMAGE) // Specificați intenția care ar trebui să declanșeze de fiecare dată când utilizatorul interacționează cu această celulă //setContentIntent (loadArticlePendingIntent (context, "https://code.tutsplus.com/articles/java-vs-  addCește it.apply addTitleText ("Coding în Kotlin") addText ("Partea 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 = ...) addCel it.apply addTitleText ("Lambdas & NPE") addText ("Partea 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 (  încărcare privată loadArticlePendingIntent (context: Context, url: String) = PendingIntent.getActivity (context, 0, intent (Intent.ACTION_VIEW) .apply data = Uri.parse (url), 0)

Puteți găsi codul complet al acestui proiect în repo GitHub.

Porniți această aplicație în dispozitivul AVD sau fizic Android și încercați să interacționați cu fiecare element din rețea. Fiecare celulă trebuie să se leagă de un articol diferit.

Asigurați-vă că felii văd bine, indiferent de aplicația gazdă 

Modul în care este afișat conținutul felului poate varia, în funcție de mod aplicația gazdă este configurată pentru. Pentru a vă asigura că felii dvs. arată bine și funcționează corect, indiferent de aplicația de găzduire, va trebui să vă testați felii în toate modurile felie diferite.

Din moment ce felia noastra de gratar are un continut semnificativ mai mare decat feliile anterioare, este cel mai bun candidat pentru a ilustra diferentele dintre aceste moduri diferite de felie. 

Pentru a pune testul în felie, faceți clic pe pictograma mică din colțul din dreapta sus al aplicației Slice Viewer și apoi treceți prin următoarele moduri:

1. Mare

În acest format, Android afișează cât mai multe rânduri posibil în spațiul disponibil. Acesta este modul în care Slice Viewer utilizează implicit. 

2. Comandă rapidă

În acest mod, felia dvs. este reprezentată de o pictogramă și de o etichetă.

Dacă există un antet primar asociat cu dvs. SliceAction, atunci acesta va fi folosit ca pictograma felie. Dacă nu există nicio pictogramă disponibilă, atunci Android va afișa acțiunea principală asociată primului rând al tăuului dvs., care în acest caz este desenul nostru Kotlin. 

Pentru a schimba pictograma afișată în modul shortcut, adăugați un al doilea program de trasabilitate și apoi actualizați următoarea secțiune a furnizorului de felie:  

 .addGridRow it.apply addCell it.apply addTitleText ("Java vs. Kotlin") addText ("Partea 1") // Trimiteți noua extensie // addImage (IconCompat.createWithResource (context, R.drawable.androidlogo) , ListBuilder.LARGE_IMAGE)

3. Mic

Modul mic are o înălțime limitată și va afișa fie un singur SliceItem sau o colecție limitată de articole ca un singur rând de conținut. Dacă felia dvs. are un antet, atunci acesta va fi afișat, ceea ce se întâmplă exact cu felia noastră. 

Schimbarea titlului sau a subtitrării va afecta conținutul afișat în modul mic.

distracție createSliceWithGridRow (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, ListBuilder.INFINITY) .setHeader it.apply setTitle ("Acesta este titlul") setSubtitle ("Aceasta este subtitrarea")

Dacă felia ta nu conține un antet, atunci va fi afișat primul rând al feliei.  

Cut Down Code, cu constructorii de felii KTX

Odată ce ați învățat cum să implementați o nouă funcție, următorul pas este să învățați cum să obțineți aceleași rezultate, cu mai puțin cod!  

Android KTX este o colecție de module constând din extensii care optimizează platforma Android pentru Kotlin. Modulul KTX de construcție a lui KTX de la KTX împachetează modul constructor într-un DSL prietenos cu Kotlin, care vă ajută să vă creați felii într-un mod mai concis, ușor de citit de om. Pentru a începe cu Slice Builders KTX, înlocuiți următoarea dependență:

implementare "androidx.slice: slice-builders: 1.0.0-alpha3 '

Cu:

implementarea "androidx.slice: slice-builders-ktx: 1.0.0-alpha3 '

Apoi puteți să vă modificați createSlice de utilizare a acestui DSL. De exemplu, aici este o felie simplă care afișează un titlu și o subtitrare:

importul android.Uri import androidx.slice.Slice de import androidx.slice.SliceProvider de import șiroidx.slice.builders.ListBuilder de import androidx.slice.builders.ListBuilder.INFINITY clasa MySliceProvider: SliceProvider () override fun onCreateSliceProvider (): Boolean return true suprascrie distracția onBindSlice (sliceUri: Uri): Slice? cale path = sliceUri.path atunci când (calea) "/ launchMainActivity" -> returnare createSlice (sliceUri) return null distracție createSlice (sliceUri: Uri): Slice return ListBuilder (context, sliceUri, INFINITY) .apply setTitle ("Acesta este un titlu") setSubtitle ("Aceasta este o subtitrare") .build ()

Utilizând DSL, acesta devine: 

importați șiroidroid.Uri import androidx.slice.Slice import androidx.slice.SliceProvider de import androidx.slice.builders.ListBuilder de import androidx.slice.builders.list de import androidx.slice.builders.row clasa MySliceProvider: SliceProvider () override distracție onCreateSliceProvider (): Boolean return true suprascrie fun onBindSlice (sliceUri: Uri): Slice? path path = sliceUri.path atunci când (calea) "/ launchMainActivity" -> returnare createSlice (sliceUri) return null fun createSlice (sliceUri: U


Cod