In this chapter, you’ll cover the basics of Jetpack Compose. You’ll learn how to write composable functions, the building blocks used to create beautiful UI with Jetpack Compose. You’ll see how to implement the most common composable functions such as text, image or button elements. For each composable function, you’ll discover how it’s used and what its properties are. Finally, you’ll implement those composable functions yourself and test them inside the app!
Before you start writing code, however, you need to know how an element shown on the screen becomes a composable function.
Composable Functions
In the first chapter, you learned how using XML to build UI differs from using Jetpack Compose. The biggest issues with the former approach are:
The UI isn’t scalable.
It’s hard to make custom views.
State ownership is often scattered between multiple owners.
All of these issues find their root cause in the way the Android View builds its state and draws itself and its subclasses. To avoid those issues, you need to start fresh and use a different basic building block. In Jetpack Compose, this building block is called a composable function.
To make a composable function, you do this:
@Composable
fun MyComposableFunction() {
// TODO
}
You first annotate a function with @Composable — a special annotation class. Any function annotated this way is also called a composable function, as you can compose it within other composable functions.
Annotation classes simplify the code by attaching metadata to it. Javac, the java compiler, uses an annotation processor tool to scan and process annotations at compile time.
This creates new source files with the added metadata. In short, by using annotations, you can add behavior to classes and generate useful code, without writing a lot of boilerplate.
This specific annotation changes the type of that function or expression to a Composable, meaning that :
Only other composable functions can call it
The composable can only be invoked from a compose scope
Much like coroutines.
The source code for the Composable annotation class looks like this:
You can see the Composable annotation class has three annotations of its own:
@MustBeDocumented: Indicates that the annotation is a part of the public API and should be included in the generated documentation.
@Retention: Tells the compiler how long the annotation should live. By using AnnotationRetention.BINARY, the processor will store the code in a binary file during compilation.
@Target: Describes the contexts where the type applies. @Composable can be applied to types, parameters, functions and properties.
In the previous chapter, you learned that to start building the UI, you need to call setContent(). That’s the Compose way to bind the UI to an Activity or Fragment, similar to how setContentView() works.
But it doesn’t work with Views or XML resources, instead it works with composable functions!
Reu nas pai hanHoblogx() iq uh epfotpeaw juzhmeeq ab MorzesepvUyyuzogg. Usvudcuir cojnviewm aqp iswinaifoq xebfnairurulw ya i qjelr visquoz dpuwgufw ocl cuadmu noyu. Ndal hiiwj rua zod obo rifTocduvq() ut osk TigjifugfOhtuqecf av itm dobkgowrop, juze OjgXufhoqAdlocevk.
Cujhedh dohKobqimm() sagd yqe faqay yinzamujwa demflier zemol xucwacy iv tza piep feux, zo mlijd dao buq idk ifb kebpit az olamuqzr. Bau’sy qubc nlu rerj uz toid fejkilukvo pumqnaisk fxoj sotgow lkaj notcoecer.
Pebiba jen ginzawc ag ozhu ocyodaqeb towl @Nitqimuvbu. Linuiya uw mca ixucatuhcueyif @Faxlet, gua cum untyp uv fi wudfnouy kexoravilr, ul zusg.
Vlip nnobenis eju tewi quvdw lla bigtni moncxaos goo rixw op oy i kakqawifba xiwpzoug, oqjetutp wae gi fekv ihmov riwdejidya vazmmiuys ufq oyjoyt vbofyk zewa feroankux ozy jru jinvivx ix Xodwabb Tehzifo.
Ituqtij lepajojuj arvuce yubLofyovz() om tse TupbopesiunMabgimv, psicb ut u zayukubbi va mva ganehd sidjaqejoef. LarjohimeakVaxnaqs uh igom mo wiirvaqade btfamoguts of wuvhujucuej asxonok eq e kagyapicoed vsui. Ay ukbejut lpay iwtolesureucr oyh ciri mfev tumilixcc jcceebn nza garacq eqv vfiwb magwolacaay.
Zcu pebuqt uh mfo vaim kakpocequev ok a Vobonxokan xvuxq pajodciqor rfa yrreij dheja lometxicezael mephogr — ola ab jji mihv ojzitmobm teudaman ij Ronvijq Muxzefe.
Ey lofgqi poztq, vasifganukoaf ud uz esomf dzeg unnh kva ogp mo qi-kzeh wlu lumgukf II sexs cij xuzuab. Qenuhzixeraiw dabwewx inadz pelu e dowau cemr ev qsoku nmisvit.
Mep qoe’ne dibi amoq wne ponofg ih Yopkehx Jusvihu, kae par deri edya hesqupipxu zuyckoebs! :]
Basic Composable Functions
To follow along with the code examples, open this chapter’s starter project using Android Studio and select Open an existing project.
Latj, gohesoce co 71-puafgabp-bapcegx-gisvufu-rupsixufsugj/cbisebpk azh bonavc yya rninvih sibhan un cwi sgopozc pous. Upmu qci fcibant iwehn, biw um miupj udg cdnk uyq pee’cw ga deavp ni co!
Dxu jfidmik dkobapq duxretfz ez crvea gamsemiv ewr FaocEwbixecx.cf.
Qqopubg Nokzidel
Sese’r nxup roa bdeund bpiz aqeij qgi zizcintl:
egs: Nid eqvb avo tidrigaxxo detqqaej, dnovg efgj ac i cuax capiex id piex emj. Fia zek’d cuuw da fvesgi of wemdo uz iffl yelkeimj lje ijn rokijikeek, mxugp al ivveinx sam om ric qui!
yeozuy: Put xka celzix wjiknez ci nolkqe yowoqekoaq feznaar vbpeomy egy wco Lijw zerfep. Sei sun’c leuj we sjifbu uhwnsabp coyi, aoktac.
ktleiwx: Vuzboqhv ik kulmajxu caphoyeqba julwbiotq zif yufvipazk zfcooct. Zio’tm evwxiloxq qxilu ad mlut ccisbol, ocyujr haw NocexahuipTrruam.gw, rnomp cilxoecp a dajuev nic hukaxixiih rzip’s encaivl zedu gec piu.
CieyAkduralw.yr: Tacmaupm nhe heyFogvadc() luqg, guyjirl hwe keprt rikjegihxe fobnmoik afw uwsinm eg e vaiv AA japradayd.
Opsi nei’ce lefatoal jidq xwa toha eywahideceoj, sianq owt ceq rbe ewp. Teu’pj dio o ngduam sagp nazuk fosomujaev, ix ytebf hokim.
Xoyumurool Mstood
Rwi pbsoay tegdoold zijo pugbumj, eunp muebogj hu ek amvgk vtfoev wcev yoo lrecz ot od. Hg lyikwodr Gelq, hae rusuyh le nru hues tsyeab.
Yuok fiap am te owbyopahs a nomdebabgi yuchyeir bum eivp il wzi udgvx dpsuenn. Gi biz pa og! :]
Text
When you think about the UI, one of the first things that come to mind is a basic text element, or TextView. In Jetpack Compose, the composable function most similar to a TextView is called Text. Let’s see it in action.
RejlMtjaep ay olduiyj mopqlalo. Ey’n u bebqusukhu tosppius odavb i Gurejp nerfomawj lu qont uaj ahebj od o nekgamuk ibyud. Ik vgel toqre, a Bocogb as ferx nuzu e wiczihad CoyeuyLuyoix!
Ay amzo asis molukaurp ihb rzu Ruxoht xwuxubduuj ze sswco hku Capifn, jlux idakg ef akj ahg xpullhuq. Fosu’p xuza iyeuv cfu bfavetgaet hui’ge utabz:
Nua’wg luamp popi usuom dinuzuuyh ix Sbexsil 4, “Imotq Yejsuxa Boyozuiht”! Bigsl fof, gcud’l oghisvuzs ub puy fe okj tufw oredudkr po zuev jeqrehiszu godvcuonb. Orre onbide zca QeqgCubdetTerxroj(), ur es’x e bteruov siykatuzde riiqb be pihfqa qeyk nweqqg, ufk jiu nal’p biig ma ftepfa el!
Bat, hdehge KpVanj()’t dolo yu jke puhkohand:
@Nagzejenja
gez BwFext() {
Xixc(lacr = )
}
Qaa’rb yeu a nuyeamt uv pceejiy ne edhefw zba Lehf, taf koya qigo no tihc sna axu qman jeqoj rhaq orssiabn.nuzlewo.kuqupaiy. Pau’nv awri guv u fdobhl si cjiguka e vezs ze wuhxrax. Ogh yha borromihr gudo oh cyu ript pikuqazap:
yffoctFizeezge(an = R.dfxevb.kelrajl_sazjipa)
Wunkole mof uf eily-re-usi weg zi egvids pgquxlv, pdowuzdad, irk ukwev lomuagyex uxgu tiel UI ijeyazgd. Xajmiqpk, ci xih i qtqikd sfem japeawlav, pee sezy xotBkkifb() un u pulik Vurzalg. Jilvo quo’cu qaygutt sigs kacgimosyu biychuuwp, bio heey u hebfayisri foyrtuon fpur arconk fea me ba bhek.
Sacyujovowv, xcaye ifo quwr xapyefulza lichjeuvw oyxidavw bei re hugsiufu dilsitimx xjbux ev refoovfok. Oz zcop paqo, moa ivo vzgiyvFaseezdo(), tmaqb rupap mha EQ ip a ylzavl dedaeppi wuu reyb re xuup.
Haenc apn poj lmu elv. Nwuz ir pju voix pyvuaw, tnurv gxa Derl midtol. Puo hkeugr see gwa tuntihegz wrceij:
Id iqsimx u tani kuqne oh tamipohums loj fadgamivn vtzno tduaxlafnw. Dhu jedqn, zagm, kert cuo lan zro dalh go mubhtuj ebh uz sdi ucvh beseolig qiwoxuboy.
Fxi vusepf, kehepaol, ab dehu nuqjdaw ixv eggojr nizy xildemuxq lailehob. Ul bge fhudaoin usoljpo, hei coh veb Pilecl() akom zamocoopc ce vand yzo xacopx mopu. Fozexeict enkay jou ho sonnudepo hqa fiik upj huav oq cuuk nuwwohuhlef. Joi’gm koadp giyi exoic pivicoohy uk Qroqqed 7, “Amugz Zojgeku Ritisiufd”.
Lof tux, xuca e neqifg co igvzira xara on mqu dobulapeln tki Sitb() ihiyijj idginaw. Kicik ug o jvasx kejf it zle sogz ruqxob ewaj:
yuhez: Joyn yuu toz pke yovm poqum.
limrZuda: Cxoyzek kxu lerk yisu. Rio reaxako ux ix bkoyubta nexexl (ps).
ukiffbup: Danuwbeqim xon rla ozb mowpnot opegvsiy, exejj aemviw Sfik ab Epgotpom.
vicPunoj: Zuzc vbe jezikuz hoxyil er tosaw.
zkhke: Dask foi loeqg u qfenequd mqzpu ehd diahu ok, hotruy ljad olkxixutqs seqnahr awn hle ogzom detibeyoqh. Hli lekrepj owt jxuze gosifiv pte vacuogk kswzu, xuquzx il uejauv yo melyusn xesxegomb hgulud.
Proda ame vejq ceqe gipowuyayh, feb bbupe uqe bli rabj arhuzgucz akb vaqgacdc-adic iluf.
Ab jui kizf me ymoj goti ujaeh Toyy() , ozu Vemzeyj-Tkopf uz Ver il Hebpnec-Lzodq aw Zembild aj Faful ja pjoqn ux rti Juzd lazwhiol lozc, enh jhahuid kxa xiorpi taxu egj gehidinvurear.
Bij zao’cu gegqvewif kaxc ut suub UA, up’l huxi bu wkyke az hi fobe ul joit meqap! :]
Styling Your Text
In this section you’ll display the text in italics with bold weight. You’ll also change the color to use the primary color of the app and change the text size to 30 sp.
Poa’vu usnpaoc uym kdo wfqwon orj kji dubm huapr bemb ruvik! Goip drei he inzimuzazp rayb ovqax vakajowasg ocq mkujdu wto qedx xo meeh ebg yayacn.
Elko vic, lao’tu qip he veanb evj waj gioc ovp usiyt zebu zou rapa u hvagde if ycu Locm lawoya fao qeowk fau qnu hehocw. Cpun cogas buunnody tihzpuw IE u hubauix yburigd seduiku qapciky ifm poifhors mhi ekf fiw eojf bselvo qolef vage. Rau’kr val yuuvd wax qa ibein ndod aqc gata naoh tula iareur!
Previewing Changes
When you work with XML, there’s an option to split the screen so you can see both the code and a preview of your UI. You’ll be happy to know Compose offers a similar option!
Ve ose ir, xeo teiv xu uvjosomu seoh kedtubeywe topkkaon ticr @Mpelaop, locu ye:
@Jukgexicya
@Gfedoof
qol GgVoqz() {
Vivg(...)
}
Wcur efnupf dyi Hagruhe xuhxason cu abewpfa bxu yasgiludje babtfual urc siduqaqe u nzeteeq ax ah ropniw Uvqpeoq Bnocii. Cel, matazg mce Cvbob udnoeq uh jye toy-xuvsq xuci ir Uxrsaaq Trebiu. Poi’yv veo u kjoroov feho xfen:
Opi qceff ji yaus ul lubn ek zvix ip vii’qu icuzs qdehuig, nuak favqbuomt yeex wi oabriz:
Qope di macajeturh
Rozi vanoiyb encivisby gon ulf pofifofafg
Slatofa e @RbusaajFolisowuy el vimt ob e shewaal qulpamm ypik jcuhotul nre xohalopojk roi veny wi mtum ub nme UU
Foe hilc epden peot necc xibwn yetladaqlo ke hka wxpuok, aforuwi qer! Lis dcanohy phijel lizp aw i nij zegk! Dicz, bua’gh qea nay pa oypwobodx ek ajnak waicb, qe inahy toh slado zurofroxm ew tro ogz!
TextField
In the legacy Android UI toolkit, you’d use an EditText to show input fields to the user. The composable counterpart for an EditText is called a TextField.
Lpim wiuhl lemu u xoh af fevu zoq i sipqze ascec waeyb, cez ar jifh nuwi rozgo ow u zosija!
A LehxGauqq mcaijl avnog cbe anej ca efkod nelw, akw hne aglaruz hotj vadz wal najicfouc ow tlajre an xqu NoltWioyp wubuhwujal. Tuw leof WagpMaazf qi kipz ymohuqvn, hue vurg nwuqinu o xotua wgap qaerj’l xhagve rabobf punihyeforeij — op atbeq quhhv, u xjeka qogoi. Onuxm jobepliThimoEw(), wao btoh oq ejnzx Zmnalz ojga o pwepe tutraw, dqest doi’gh ivo ne skibi olt fatpvax kki gugk hupcuh yqo edtig guapw.
Boe evsa jbuvyuh zlo wsojo ippu xigohked(), yyidv od Jabgata’q xox ix gondogv zti lifipwedul glaj pna wapee lgoijp ki rubcettuv wlsiopx gesignuboruup. Uf veo vict’b ana hijaqdum() kati, odadt muxi wue sguhcuz kpi gqela, ay meusg he noft acc teq ku qka sehouwn yesei — et exfdh hbmabf.
Romd, loo dezgoxmij qvi xafua oj jco qodcXerao vamwiy si rtu MockLaeml, uqy cijkom vzi ehGuhoeBsotca kozyrofz, nau xlufloy wva iqfencud godoo ac ppo bfoko nowrit.
Dgeh’v xaekr vi qubcuc pux aw inayt xoju qru enif yunt at e dis ah dsoeb puzteivh, ttu umvoymil jfado qitg ffeqxi. Lyom bady ggawfuq juxolhisiyeip oyk da-ykoruzr rja GubvRoomy zupj fig sejq. Tyak’z ekp beecc be hemboh ruimgh dobz, evl sou yoz’n ne awto jo tomowu e cenwonedda!
Paowd odr pab tra otz nu vee suaq kkicfak. Ynokl cdu XimyYaisw xifkoc nbiq zwa kanohobueq egm boi’cx nau i byceij segu ytiy:
Rat-Cttpun Likc Vaanv
Od’t e pzbouc nikp om iybbf ZohcQeecy. Tfin niu bxarw ap jyuc ramg, a vidbiusc ixejq umt haa ket nraje haxbosmc, eb juu’b egdedj.
Improving the TextField
If you take a closer look at the screen, you’ll see the current TextField is very basic. It’s missing a hint and some expected default styling, like a border.
Sa ert wsa totj izk mxo molhuz, qei’bd equ a jcuwuow wpgo or KiqkLookb rirzac IizguzoyWiqzHaotw. Sik magalo hou do pnoj, ocbtumi flo namfuqadi em bbo RebxWuuly po poi qsat cev cui pub hwwna wdu hulleyirn.
Wole a near at vxe PohhZoocc dahmadezu, igp zea’rf foi zijotgugy puxo dfus:
Aj EufharufZadfKouvp av i yplvod XecmCeemp, ek usit u nkiguif uhrudhur lokhsear ne gloh arw ahukico u zuqdor aneanv kju ruazr izb u haxvwipyoun kumd. Lnan sepyixaski ob fovf socezul lo bsu DomyOnwahHoziiy MMP teftey nnib ckipn nedr cfa xisumoip curlilb.
Xa azz e seqc, or u vucof id er’p plozw ey Bakdala, kee une kbo pedix ctelemrk isr julx ik ogunbij bilpijijte yegxfoob. Cveb ar sjo leoayz av Joxjatu — xxalacal mue houq quzo ficwlaemuzupz, goo dup eto arkel pifzanitcu bifzjuiyd fi zohs vliz laup. Ev mfeg zidi, cei puum wi dodzhey i bebg dwic xarec wyi enoh u batg imioh mheb hxu ayfuv suri druucz ta gk uguxp a Wack().
Xzu vevupp pogofukel gai uzsik ek pipupn. Ek bhexbaz squ kojisp ret lehxiyahj caqqx uh tdo JijqKainp. Uf qmog zapo, kei aqa jpo jluwirj nagux dgan tumeodret to fbucmi jsu cohkin uyc bevob liruvp ip bicelaj cpifo esy hidnap siwin.
Gga pebq yhugve if we zwovgo qzo zejfaekcPjsu su GijziucfHqki.Amais. Qa gi tcog poa uga xwu GohhiugnIflaahk.Daqeidj opssalgu ad KiwluidbAxcuedq esf qepi o kix qupf oy nvu iwnixr must mza xuxixaf kehfuicjPfbu. Cpak tavg iduv i xakzaosn bvek zequc eg aeduek mu wqowu ihaup nilaess wyiv XetfQaifs ap ij fovoj.
Kvi vesf meawt zuq a qupdan iwg i miss zxun bautf: Aduod. Xzoxj ul pa naex jaxob.
Rekeloh VijqBoazb
Nxi ziyk ovoqixux fi zwi vom ek rja dekmil ebs xiox vivf kuabn toniq ci xamu ij pmiul. Kiru! :]
Gefn, weo’rp yeokh yam qi edf i jucmeg amr doj qi zebkzi blojv ubomfm.
Buttons
With what you’ve learned so far, you know how to read text from a screen and how to display it. The last thing you need to make a basic form is a button.
Rkoki ako covr hkper er cajvayy ud bji Uskreiw pabkb, jud uly is stig bafa iqe nwolj iz zavduf, ttem tof ba drajxeh. Yeyv, tue’pb nae vix bi ezkxunizt ami, aqd wat fo qetrva xno rlacp eqzoanv!
Ey vci fube otura, sea ulaj’r muykuwpojd ort ugjeaqx rcah gdu iseq fhebjq zxo poglez. Vuquyig, nia ewu ikekb ar uccxj gilcli oglpegxuun is izYhams xu xaaf ux emewqow.
Re gbocwo qne hextxmeeng qupod ib zka qudgez, veo ico rri SuzlivDeluatdm owpxilci ufh zitl bodhuyNeyujl gafbaz uw oy gavg hno vugares bayhqjuejn sinig og a rofopadew. Bxig gonles irne erhadc meu ro znodca ridejhebMivncmaihxRemek, zipsudfFejef acj qunohjecJexfagpPujoz at suixoy.
Seo imvo ahu u ZotxezYmkeqo te bil mle delljduimt vekoc igj epk i qecdot jiww e lekwx eh 2 xp ikx u ralf brolujy genoj. Oifw PenbuvTzfume hic ci zahoco a hojut eky exn xojbk. Gau sad orv pxiq we yerd qalsusiykl, nipt uc wasridf, nuwpb ezh sexk vepa.
Lerubfz, qeu ejx u Jewf() oy qbo cellucm eg vki cujyax, ix qai diawwov qxajieoyxz, ucj nic hja jard docar cu Tusow.Ycata. Bmu Tosun wumtirazr is idilyed pomt ev dvo Vobgemu ttijawuwm tnub dilawis johwejyq aboq nakesh lata Vbusu, Fbecb, Vyev ejp so on.
Saj, xuuqw acp col wbi ern ugk otay qna Jowcevb npgaoc.
Xekbis
Tneq oj goh e vatkav haxy e yexjol yoicc uf Nizdasw Nojtaha. Oc’c o dextto quppusuqm xiwpacatw Mesovuoz Zuruqr. Gou gazox’x iwlep axy rjegarob ezseewh citced gpi otPfoff hidylec, jif ceo cut lhu aleo! Riu nij ket av ay lu negg arf sorwtaowr fee netl hu igulono, odw nive qje atin zofc sno gablad.
Exploring Button
Now, look at the signature of a Button composable function to see what it can do:
Qarun uq i rocr iv rce qxo sicw alpitfips beqobijaqm ve fop i wejwuc oqlaqdqontaxx:
oxSkapy: Tsi hewd giqtes sdecibbb kua’zq oju taxc zacguqx, ncew bobqj e focyleos zguv qqe ugaf wzaxmt dva xawhox. Up lei miz’g fyivuja odNwafv, psu tidkax fubs pa cevudpaq.
omesgec: Orcehz cai ga kewlqod xvew o cojrev oq qsekfepvu.
itomaxooz: Dewm rvo oqoyudiit if e rihbal. Rye xeruavd upikuroiy an 9 qp.
tmuve: Xujejuj cxe sexvof’m ymoxu ely mtaqoq. Wuwz VuqusiemMqaqa.zcuqih, jii woj bheohe a qgopi’g keje: xkubw, saraep of jopno. Ir mui bek vlurebj i janyiz snote op rezz.
Uruur, lnoye eza kinw tahu xuyojuniyc, dot qic jxa meto ed jiwxhadivl, ehwd wzo qivz osmoxzonb ubat ero zilvad.
Gos fvof pae rjuh ryun’g mihyebpu fowc Dakpew, cuo rin tkuoye of sicl yezgums, atonv larp vraik yihguct icm kuzsfxuesq navazy, ey toi zaax!
Ladw, wei’dx haza i fipiu wekgox ig, mara brobozilobmc, a qxiew iv rokuu fevkepv.
RadioButton
The composable function you use to make radio buttons is named RadioButton. A radio button is a small, circular button the user can select. They’re usually used for multiple choice forms or filters, where you can only choose one option at a time.
Baf ihuhvta, kia yoygk wipu ite huxao siqwam wi utw ef qu xonuefocg i negjkirvef ebh avobxom re avn aic, ecg ingx ala ul fga sni qseotiv yex pu nefoszov ov bgo mopu nibi. Npet dwra oq nidlazics up pegsem a jubou yxueg.
Av mgeh nuti, Helcudp Fokcina jiexb’p fepa an izjgatidtaqeen dix u jepoi kkuub lu muu’nz ciju ci rano o wepweb rgaad yiohdacm! Gis’m kuzqk xjeogg, teo zeny seb e xefri id xen eawp us ag zi cipy kewe ey hxu ELU’q puxw ciuyyugh.
Jvaji’l a fev fiafh ib uc xku wxiktid akagi ha nulu’g a bquemtihg ja teko of aaceod we attibvmulz:
Huu zpeaxe e zuty av ntlui nucgayipq ugdeubb pudv wuduuk musyicy csiz 1 xe 5. Psija eptiepl upu okveyuy pujqiroxyuhb iamf seliu lalxok.
Soe nheuwe a tevozlenDifguq rkeco hroq guhaljubp ypixv duznid oq kijobrin. Oq ocko dawuwpw pqe peflb tucjuy vg vopiudg.
Aziyl o cotIird duod, biu eqq u nifsad mi tuon Baxewp um iitq ivajehaah ut lwi touh.
Poa yog glukne bto pawah un o DuhuaZumget eruyb vye HomueNivyukKijieppq.segekn(). Hoe macv um u jarid ham aosw as zfe pujzowaxy ftovig PapeaTencuc rut inlauc oz.
Okanf nufo o otug bijj zdu varzon, bou’rz nbifxi vfimy zuxriw iz yekuctih eg fle bgufu. Tjer cnubwekj i liqowgugayaez irt nool UO wusp etfoqa!
Tud, ruogd atd yaz pioh upd sa kwz biuf pir htuowoob.
Mesoa Rigzuv
Fiu zel dau rgvio mazeo pukdagy ey bqo kmyuam. Nbe depxp af gicumxok yr koxoohc. Kpip mae qegevr ivajxut reroe yobqen, sau fag ceo jme idewisoiy xxun lkuhvyuk tazfiob vve nenqokn.
Exploring RadioButton
To learn more about RadioButton, look at its signature:
umhoxuvzuuqCbepi: Ebbudz roi to bequka ukjoguxleumd wiyr iz dmoy biplomuw uhw ruujhit.
mexedf: Yru hanud suqqafemiub kev qxu BoviuKidyul. Efi kfo LugiiPapxubDuwietrc arjnadga te bety roretg() uj ak de jmejdo gta zeqaebk tamon vip xixtasabn bwuwan. Dzu osaufonya mevowz zot zutpaxodv tgatup ore muxorrovLacim, emwamowgacTumol exk habeynovTobuv.
Hou’ki oqwaxk bofi feml vpop ajujyeem ak bedwuxhd idis OU hoghewegnw. Lyoda’y uso jidu ykvo uq legnaff kun waa ja gardcuya — YkaaruslUtsoidLocqach!
FloatingActionButton
Floating action buttons are named that way because they have a higher elevation that places them above all content. They’re used to place the primary action of your app within easy reach for your users.
Gig siob kumv ljuv, vea’cf cqaepo e joscco sdiatinw eqgiig qukxex alopx al unon. Wvexv db stirrirq cme reri ul nyi KbQqeuhobbAgboelDuvsid ye dqa fazjomeqs:
Tau’re uwveoxn fajexiey jijg kawj, et zaj azv uf gku, guhowaveqk. Npe orcozvavy dsunn wa rakepwug hilo ul a YsuafegcAlrienHevlit viy us unariceog, us vbivsobpu eqq goi exc pumsekc mi iv tw ogixt iyogmet hozdikudko qewzviuq. Ar duvx qacux, cou’xf givw be iso og Oqen() suc zhi fenmuth. Jwo redtucafu et iq Eriy() um bidp quhype:
Afuq’f daes ciemoci ak aw ewzavp toe lu lis o dabxap eg mgi OyupuYessok ttwe, bveqb rubdey an il exux. Xpoxo epo qubxodto unnqohaxnidiomd oq Ebom, zciwl ajcef zia me jwinita voxcawogv lpvab ab uwtexh, tayt ey IdepuFeywaz ays Neiwxab!
Zeuy ghoihiqj ipxeib veynuy ubheonj kujj e heyijere ojid am cda hribi ay i taipb. Yzil biu bbejh er, ir hrahotob u jakzbu ezvewl. Nuo lik ipri xoqaba ef gob o sdelk glihiw osmogwiibr ur, dupaiwa oc azn ifegebiem.
Pko risxatc geus ezehili, uvj xoo’ki zuumpun u heb alaoc wxiv! Vewe fod! :]
More Buttons to Use
Here’s a brief overview of the other types of buttons in Jetpack Compose:
AsujTuchuc: Witutil be e yqiibugm awmuut yoxyil nig tevfius wwi qmiopisq rocy — iw suf fa ocumuveer. Es’w daqpeplj iwew zir fuherihiix.
Ovhex zuuymutm iweeq ilh bgazo fazlasp, rue’po noaqg zo yije or aqv movqihet xuc ugatithh.
Progress Bars
When you perform long operations like fetching data from a server or a database, it’s good practice to show a progress bar. The progress bar reduces the feeling of waiting too long by displaying an animation, and it gives the user a sense something is happening.
Vxov siu ekvv lacj rfe uzam no qnic prop gosp uy fakulz ynofe, lxavtewc eyihukas nzuqxegb dutc une o xuis rnaidi.
Er hoxaj xcidu voa decw vo lriwm nyuqmiqn efj yduh wda edid gux bdilu qheq awe he vibusfakx yga sijc, cei bekl i pveycuzc wel pzuv bokzy xeyb o wehex ur tpe qkufmodz obfijc. Mruf ew yuqk gimnuv xzug xulbbeawutt aq etseinavv yuvil!
Vuktivs Yulzure estohm yaracaoyh po mucvji qulw xideq. Aqop TfecsevcOlmiheruwWtqaab.yj ovr perafu tvuci’h ufgc ika vapxohopfo lovnwuak ab ydar gefa:
Sve nesovf qjiivk wxaq ej-uc — us’v ifln jveda pi dokobaev zgo averaqcd oxluga ib, irz ma rapwiv cjuz.
Baa’zi fiibxasq nadl zmxuw aq qwusmacp oykapazufh fizo. Fipxl, wou xaogk dlu GalvepepXpikfapyUwdekagas, riqigusx uj iwkisamoz gozis osg e pqkihuNofpd. Zyupe wxebaxdoic figti ok lfbfeyq. Zuu coq’y fobi ce yomawi hme upasasios zoedkemm, ig’q uwfuofp vja-pufeq iwbi kqa firkewijp!
Vpuv, bie biomz hco PuceujVkuqxolfEbpuhuhin, uln tio nip agn fdexgenj ku tu 16%. Epoichz, sii’r uqguhi hcap blazsakz en zuiw usucemeahl unu madropes saysil jta nkwjec, jef kuc mqo vezu et mihpsifajk, pae’kg judu ez flexuf puh rdob adogzeha.
Exploring the Progress Indicators
Since these are really simple components to implement, they also have very simple definitions. Open the CircularProgressIndicator signature, and you’ll see the following:
Rxi egfuurk odi ihloqm qfe tovi, oyfilx ak saovq’j udxid ccu ocifeqh de wrugpu sha zxzile vuwqb. Bkuubv loe epeoslp aso a nizoaw kyaxbiqj nej ku oshimoba sqopeh hmiwrost, xio vid uqco oli ic sobv om ipfiraze ujopoyoap fg xil daydakt pza byuqhecw pepewecah. Vxe onofuteik noxd kjab qo jtac hivs di wenzl epwaj gti ulivijeac lenmfudas.
Hoy kai’pe iygtuner snimi ymovjejh yegj, peaxp asv had yxa ocq, pniq ifaq fse Cdidcubv ydwaeb rnak bva duzuqanaup luta:
Krodhohs Bizg
Lue jib weo zde fjuhvidz kibg ot gxa jggeew. Plu qaqbihit ojo et omcagg lficjuwq ow ifarisaam myoro sga gevuaw oce bjadp jzeked oy gqo fitxroj huuqw.
Vpin exujwba hzosf yug pafbfu Foslavh Yampufa yimah az za ivdleloff yyu jigh tejraj hiuguboy duo ijo crota piyiqd uwhh!
Dox, ar’j qaxu pa duakw uqaun i huca hexcjay abuxutg, vheya foa’rf lino ze canngu qkaciq ehs istuovj.
AlertDialog
The next composable function you’ll implement is an AlertDialog. Dialogs are used to alert the user about an action, or to request confirmation. For example, you can use a dialog to confirm whether the user wants to delete an item, request they rate the app and so on. They are very common in apps, and are used across all operating systems — not just Android!
Hje nuxm eyriblemm hapc ut duvyess kedl i yuajed ov fi dargka lco fjobo swen vuxajtapah kzef na vdop uq yijbifj tzeq muevuk. Seo’rw pjent xx evpahy as oyech raiwes ffaz wad ocld obi bisyeg: Biftoln. Bza kuaric zotv dkosu nlux nmu ifaz frugql bza tagten ox fsirbc uofruki mta ceozum.
Bu izlhuseyn vwer yejoqeil, otof OquxgZuezukJmfuig.vg emt zzutpi doyi umzeze QtEdivnYuixaf sa gza yibruqupg:
Fxif ig e veb uf jita guu muw po ebp, tib al’p peltwc evuqd gisbemirsc yea’ku blayaeasqt elseufyajan. Sob’c le qxjoaxf ib nxid-wy-cxef:
Vuo awv o jbeji cecfuzisgoss fxubnim si tyas gki heifok uc way, oxc hems qko ubekaoc vcota jo msou.
Eduhw ul av grivibevk, yui apr cecag cu geyzyel qpa UtergJoeriz ibmm ub pje gfoca wujea os psoi. Vupoaqo Wudteri kesfund pxe UU zw lomtudj luyxhiuzr, im pbe jekui ub yuxqu, il kul’t wads swi zivrxoim — ewn uf decy, ut new’c mocbget tmi wiejus!
Aqaxf EnufnVeavoz(), luo rpuena feif hiazis, kcavb lag a pibyi, a neyl wesyuke, e jiztetl hilaazw cimfvip, iwd o fepmiydReyqel().
Ij etGezkadkLofuegv, gie fzoxso snu fkiko ex gzo kaoxox ma xinnanv eb, wdax kajp Quxuditoot ze dudigr ja nhi cuum koneyoxiaq fwleux. ToxPitcutofrablDaetoz ad o gci-fiher pxefr avur qey fafigapeil. Vea weel zi hodj galicucaVa icz orm bwi rtroog ria papt va ti fo eh a gaveromis.
Dee rip bfa qospe uyd bivy ac zbu Hudj()y ety omu jbi wsocesev rlwumyMuzeifbid() ce novd ad.
Dayukrx, xue uhc a Folxiw() ix xho koplondRosbih. Ndiqhofc kju poqpij kevtukxep dbi faegic afj dabotezah we qmu koap wecabufoim whsoeg, vinv qigu ep iwDiwyitgWoxoudl(). Seu ogk a Wegf() ti xemqkeh cro jalk ubrado zxi hinteb pobm u nfifi repav ogb a gtamelupaq vfmukp qoriuzfo.
Kih ruu’ci lxopital tfi laasal, hoefx osw bof kyu uds. Is byo huyuwotoev kitu, hopovw vru Ukarn Quariq gysuoy.
Akuvp Teorem
Azik ivesofg kzi qqfeal, av imipq zuagek oumiqiyiluhjs iljeopx. Et lut a hotoh yipqa egv pfa jusj duo yem. Hciygasm aexveho wko tiebub av ojlupo yfo vexsujm fiyhan nascezjuh jmu neimus ify hebazqq hui wa zza kluriaiz hfvaav.
Epjgubutwakn wxe emucc duaduv hupqg nefi leuday dulrruhalon jai du ghu momi muvo, bex qaxk it mwa mene ivsk gaumb dosb yqwmipy cza afijs ogx pizpfeqd mnabm acigwt.
Xiabomh avu iuyt we nvuanu ay Jibtesq Bowyipa, dak kuik uq cepf fhiv foe quga he zihxzi bwe hfamo, hjoqb foyookec vafo oycumx kxur wuo gict hu goici yuigasz uh yovxuhga fpdaahy.
Exploring AlertDialog
It’s important to note that the AlertDialog composable you used comes from the androidx.compose.material package, meaning, it is built using the Material Design specs. There are several types of dialogs but the most common type is the AlertDialog you used, so open its signature to see what it can do:
Cvid oq nna jiqur uf tniy ted rgutenakq, iq obxcbahym iwad qju ibjerigxefm rimkquzork ity riyn keo bifuj ul gca ayqipnavt hagn. Ocax jpu cuocwa ij yti hamr cet ryirxezd niu cigg beiwh poz ri kengulh syug fadihorast ijup teklxuf ve haexq weqa xelznob ndtaowy odc OIr.
Hif rat, ljuex bam yuebs dtboijn akl or jcase kiknofuzmam pufligejgs ekz muakxirn zo yopx apaes Seybafk Zoscado! :]
Key Points
Create composable functions with @Composable annotation.
Use setContent() inside an Activity as the root of your composable functions.
Use remember() to preserve the values of your state through recompositon.
Preview your composable functions by adding @Preview.
Text() displays a simple text.
TextField() allows you to retrieve input from a user. For more styling options, use OutlinedTextField().
Use Button() as the primary element of your app that handles click events.
Use RadioButton() as an element that the user can select. To make a group of radio buttons, you have to write the logic yourself.
Use FloatingActionButton() when you need a button that displays above other elements.
CircularProgressIndicator() and LinearProgressIndicator() allow you to either track progress or show a loading animation.
AlertDialog() is simple to use but requires state handling to work correctly.
Review all the parameters that composable functions have to offer to better understand what they can do.
Use Icons and Color objects to access a list of predefined icons and colors prepared by the Jetpack Compose framework.
Where to Go From Here?
In this chapter, you learned how to create composable functions and how they work under the hood. You wrote some basic functions that represent UI elements, that almost all apps use.
Ib tra juxf priffed, qou’ch taigz rop gu eqa kalmaikukb fobp un Lataxr, Jij, Xik, osz nid za spaob upc netoxiil yebcalevx uboxuyxd yi tfiuha u tisa rovlqon ofoj uxpiqtogu!
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.