Uzziniet Savu Eņģeļa Numuru
Inženierzinātnes Sprout: Android mēnešu atlasītāja izveide
Piezīme. Šī raksta pamatā bija Materiālu komponentu versija 1.2.0-beta01 no 2020. gada 1. jūnijs .
Trīs ar pusi gadu laikā, kad strādāju nelielā Android komandā HASHTAGS, viena no galvenajām lietām, kas mani motivē sākt strādāt katru dienu, ir mūsu uzņēmuma brīvība un uzticība risināt problēmu tādā veidā, kādu mēs uzskatām par labāko.
Brīvība pētīt un izpētīt daudzus dažādus risinājumus problēmai, kuru mēs uzskatām par nepieciešamu, vienlaikus ņemot vērā laika periodu produktu atjauninājumu nodrošināšanai, ļauj mums atrast labāko risinājumu gan mūsu klientiem, gan mūsu programmatūrai.
Viens no šādiem izaicinājumiem bija lietotāja saskarnes komponenta izveide mūsu jaunajai mobilo pārskatu funkcijai. Šis jaunais komponents bija mēneša atlasītājs, kas mūsu lietotājiem ļāva noteikt analīzes pārskata datumu diapazonu.
Sākuma vieta, kuru izvēlējāmies, bija esošā Materiālu komponentu bibliotēka . Tā vietā, lai sāktu no nulles, šī bibliotēka tiek aktīvi uzturēta un saskaņota ar Materiālu specifikācijām. Izmantojot šo bibliotēku kā pamatu, mēs, visticamāk, varētu samazināt loģikas apjomu, kas mums būtu jāraksta pašiem.
Šajā rakstā es apskatīšu, kā mēs tuvojāmies šim procesam, dažus unikālus faktorus, veidojot Android lietotni Sprout, dažus “gotčus”, kas parādījās (un tika fiksēti) un ko zināt, vai esat strādājot pie līdzīga projekta.
Ievads
Android materiālu komponenti 1.1.0 atbrīvošana ieviesa jaunu datumu atlasītāja lietotāja saskarnes komponentu. Viens no šī jaunā MaterialDatePicker
apsveicamajiem papildinājumiem pār AppCompat CalendarView
ir iespēja izvēlēties datumu diapazonu, izmantojot kalendāra skatu vai teksta ievades lauku.
Vecais AppCompat CalendarView nebija ļoti elastīgs. Tas bija labs komponents ierobežotas lietošanas gadījumam, kuru bija paredzēts atrisināt; tas ir, izvēloties vienu datumu un izvēles minimālos un maksimālos datumus, lai norādītu atļauto datumu diapazonu.
Jaunais MaterialDatePicker tika veidots ar lielāku elastību, lai ļautu izmantot izvērstu uzvedības funkcionalitāti. Tas darbojas, izmantojot vairākas saskarnes, kuras varētu ieviest, lai pielāgotu un mainītu atlasītāja rīcību.
Šī uzvedības modifikācija tiek veikta izpildlaikā, izmantojot MaterialDatePicker.Builder
veidotāja modeļa funkciju kopu klasē.
Tas nozīmē, ka mēs spējam paplašināt šī MaterialDatePicker
pamata uzvedību izmantojot saliekamus saskarnes komponentus.
Piezīme: Lai gan ir vairāki dažādi komponenti, MaterialDatePicker
izmanto, šajā rakstā mēs aplūkosim tikai datuma izvēles komponentu.
3 6 9 numeroloģija
Datumu diapazona atlasītājs
Android komanda HASHTAGS veidoja mūsu Analytics pārskatu sadaļu.
Šī jaunā sadaļa ļaus mūsu lietotājiem izvēlēties filtru kopu un datumu diapazonu kopu, uz kuru attiecas pārskats.
MaterialDatePicker
nāca ar dažiem iepriekš uzbūvētiem komponentiem, kurus mēs varētu izmantot, lai paveiktu mūsu lietošanas gadījumu.
Mūsu visizplatītākajā gadījumā, ļaujot lietotājam izvēlēties datumu diapazonu, iepriekš izveidots MaterialDatePicker
pietiktu:
Izmantojot šo kodu bloku, mēs iegūstam datumu atlasītāju, kas lietotājiem ļauj izvēlēties datumu diapazonu.
Mēneša datumu atlasītājs
Viens no HASHTAGS ziņojumiem, kuram ir unikālāka datuma izvēle, ir Twitter tendenču pārskats.
Šis pārskats atšķiras no citiem ar to, ka tā vietā, lai atļautu jebkāda veida datumu diapazonu, tajā tiek ieviesta viena mēneša atlase, kas nozīmē, ka lietotājs var atlasīt tikai 2020. gada martu salīdzinājumā ar 3. martu līdz 2020. gada 16. martam.
Mūsu tīmekļa lietotne to risina, izmantojot nolaižamo veidlapas lauku:
MaterialDatePicker
nav iespējas ieviest šādu ierobežojumu ar iepriekš izveidoto materiāla datumu diapazona atlasītāju, kas tika apspriests iepriekšējā sadaļā. Par laimi, MaterialDatePicker tika uzbūvēts ar saliekamām daļām, kas ļauj paplašināt noklusējuma darbību mūsu konkrētajā lietošanas gadījumā.
Datuma izvēles uzvedība
MaterialDatePicker
piesaista a DateSelector
kā saskarni, ko izmanto atlasītāja izvēles loģikai.
No Javadoc:
“Saskarne {@link MaterialCalendar}
lietotājiem kontrolēt, kā kalendārs parāda un atgriež atlasi ... ”
Jūs ievērosiet, ka MaterialDatePicker.Builder.dateRangePicker()
atgriež celtnieka instanci RangeDateSelector
, kuru mēs izmantojām iepriekšējā piemērā.
Šī klase ir iepriekš izveidots selektors, kas īsteno DateSelector
Prāta vētra ikmēneša datuma izvēles uzvedība
Lietošanas gadījumā mēs vēlējāmies, lai lietotāji izvēlētos visu mēnesi kā atlasīto datumu diapazonu; piem. 2020. gada maijs, 2020. gada aprīlis utt.
Mēs domājām, ka iepriekš uzbūvētais RangeDateSelector
atsauce uz augstāk mūs aizveda lielāko ceļu. Komponents ļāva lietotājam izvēlēties datumu diapazonu un ieviest a saistīts .
Vienīgais, kas trūka, bija veids, kā ieviest atlasi, lai automātiski atlasītu visu mēnesi. Noklusējuma uzvedība RangeDateSelector
liek lietotājam izvēlēties sākuma datumu un beigu datumu.
Mēs vēlējāmies, lai lietotājs izvēlētos dienu mēnesī, pēc tam atlasītājs automātiski izvēlētos visu mēnesi kā datumu diapazonu.
Risinājums, par kuru mēs nolēmām, bija pagarināt RangeDateSelector
un pēc tam ignorējiet dienas izvēles uzvedību, lai tā vietā automātiski atlasītu visu mēnesi.
Par laimi ir kāda funkcija, kuru mēs varam ignorēt no saskarnes DateSelector
sauca: select(selection: Long)
.
Šī funkcija tiks izsaukta, kad lietotājs atlasītājā izvēlēsies dienu, un izvēlētā diena būs pagājusi UTC milisekundēs no laikmeta.
Ikmēneša datuma izvēles uzvedības ieviešana
Ieviešana izrādījās vienkāršākā daļa, jo mums ir skaidra funkcija, kuru mēs varam ignorēt, lai iegūtu vēlamo uzvedību.
Pamata loģika būs šāda:
- Lietotājs izvēlas dienu.
select()
funkcija tiek izsaukta ar izvēlēto dienu a Garš UTC milisekundes no laikmeta.- Atrodiet mēneša pirmo un pēdējo dienu no mums nodotās dienas.
- Zvaniet uz
super.select(1st of month)
&super.select(last day of month)
- Vecāku uzvedība no
RangeDateSelector
jādarbojas, kā paredzēts, un kā datumu diapazonu atlasiet mēnesi.
Saliekot to visu kopā
Tagad, kad mums ir mūsu pielāgotais MonthRangeDateSelector
, mēs varam iestatīt savu MaterialDatePicker
Lai turpinātu piemēru, mēs varam apstrādāt atlases rezultātu šādi:
Rezultāts izskatīsies šādi:
Gotčas
Bija tikai viens būtisks jautājums, kas apgrūtināja šī risinājuma nonākšanu.
Galvenie komponenti, ko izmantoja mūsu MonthRangeDateSelector
izveidošanai bija klase RangeDateSelector
un saskarne DateSelector
. Šajā rakstā izmantotā bibliotēkas versija (1.2.0-beta01) ierobežoja šo divu failu redzamību, lai atturētu no to paplašināšanas vai ieviešanas.
Rezultātā, lai arī mēs varētu veiksmīgi apkopot savu jauno MonthRangeDateSelector
, kompilators tomēr parādīja ļoti biedējošu brīdinājumu, lai atturētu mūs no tā:
Viens no veidiem, kā paslēpt šo kompilatora brīdinājumu, ir pievienot @Suppress('RestrictedApi')
tāpat kā:
Šī pieredze parāda, ka, pat ja Materiālu komponentu bibliotēka ir nodrošinājusi Android izstrādātāju kopienai lieliskus jaunus komponentus, tā joprojām tiek turpināta.
Liela šīs bibliotēkas daļa ir atvērtība atsauksmēm no Android kopienas! Pēc šī komponenta redzamības ierobežojuma atklāšanas es atvēru izdevums par Github projektu un pat atvēra a PR lai to nekavējoties risinātu.
Šī atklātā atgriezeniskā saite starp Material Components komandu un Android kopienu rada lielisku sadarbību un rezultātus visiem.
Secinājums
Jaunais MaterialDatePicker
ir dažas izcilas funkcionalitātes, kas, visticamāk, aptvers lielāko daļu datuma izvēles gadījumu.
Tomēr labākā daļa no tā, piemēram, AppCompat CalendarView, ir tā, ka tā ir veidota saliktā veidā. Tādēļ to var viegli paplašināt un modificēt īpašiem lietošanas gadījumiem, turpretī daudz grūtāk ir paveikt šādas lietas CalendarView
Īpašs paldies
Es gribētu izcelt dažus ļaudis, kuri palīdzēja salīdzināt šo rakstu:
- Niks Routs ( Džitūbs )
- Maiks Vulfsons ( Džitūbs )
- Raiens Filipss ( LinkedIn )
- Lūkass Moellers ( Džitūbs )
- Ar Patelu ( LinkedIn )
Dalieties Ar Draugiem: