9. Feb 2022
AndroidAndroid Custom Views #0 - Foundations
Čo je Android Custom View? Android ako platforma ponúka viacero vizuálnych komponentov (ďalej len Views), ktorých úlohou je na obrazovku správne a na správnom mieste vykresliť pixely, ktoré tento View reprezentujú.
Dobrý View dobre vyzerá, je ľahko štýlovateľný, zohľadňuje obmedzenia/odporúčania frameworku a poskytuje jednoduché rozhranie pre programátora. Táto séria nám má pomôcť postupne sa ponoriť do tajov takých Views, ktoré sú nad rámec platformy, teda Android ako taký ich priamo neposkytuje. Takýmto Views hovoríme Custom Views.
Ako príklady si vieme predstaviť rozličné grafy, ekvalizéry, či navigačné a pomocné prvky ako sú indikátory stránok a podobne.
Táto séria je určená pre programátorov natívnych Android aplikácií (Java/Kotlin), ktorý ovládajú aspoň širšie základy Androidu a túžia po vedomostiach z oblasti písania vlastných vizuálnych komponentov. Jetpack Compose nebude súčasťou tejto série a spomínaný bude len okrajovo.
Myšlienková mapa - terminológia
Custom View potrebujeme vytvárať len vtedy, ak žiaden z dostupných Views, nie je dostačujúci pre naše potreby. Teda:
- nedokáže vyzerať tak, ako potrebujeme alebo
- nedokáže poskytnúť funkcionalitu ktorú potrebujeme alebo
- nás núti písať opakujúci sa kód
Pre vytváranie custom views môžeme nasledovať takúto myšlienkovú mapu. Teda ak:
- View dokážem vytvoriť pomocou už existujúcich Views a nemá potenciál byť použitý viac ako raz - nie je nutné použiť custom view. Ak je príliš veľký môžeme použiť štruktúru <include/> alebo <merge>. Tejto alternatíve sa v tejto sérii venovať nebudeme.
- Chcem rozšíriť funkcionalitu existujúceho View. Tak... ho... rozšírim? Tejto alternatíve sa v tejto sérii venovať nebudeme, pretože sa skôr týka dedičnosti ako témy Custom Views.
- View dokážem vytvoriť pomocou viacerých existujúcich Views a má potenciál byť použitý viac ako raz - Compound ViewGroup. Správny postup je prekvapivo popísaný v tomto StackOverflow príspevku (najvyššie hodnotený príspevok, ani príspevok označený za správny nie sú správne)
- View nedokážem vytvoriť pomocou existujúcich Views a môže obsahovať childViews - Custom ViewGroup. Dobrý článok som online zatiaľ nenašiel.
- View nedokážem vytvoriť pomocou existujúcich Views a nesmie obsahovať childViews - Custom View. Dobrý začiatok je možné nájsť priamo na stránkach Android Developers.
Za špeciálny prípad vieme tiež pokladať prácu s ViewBinding a Kotlinom, kedy nám často môžu stačiť extension functions. Taktiež nás vo veľmi blízkej budúcnosti bude veľmi zaujímať JetPack Compose.
Vlastnosti Custom Views
Aby náš Custom View mal dostatočnú silu a prípadne aby mohol byť zdieľaný so svetom. Mal by poskytovať aj nasledujúce vlastnosti:
- Mal by byť nastaviteľný pomocou XML atribútov (príklad XML atribútu: android:text="...")
- Mal by vystavovať správne množsto metód
- Mal by ošetrovať zmeny konfigurácie, teda napríklad obnovenie pri otočení obrazovky a pod.
- Mal by byť štýlovateľný pomocou štýlov z XML súborov
- V prípade ViewGroup má spravne distribuovať click eventy
- Nemal by byť závislý od aplikačnej logiky (aby sme ho vedeli rovno skopírovať do nového projektu)
- atď.
Zoznam vie byť obrovský a niektoré zo spomenutých bodov nie sú nevyhnutné. Jednoducho chceme vytvoriť čím kvalitnejší a čím širšie využiteľný View.
Ďalšie kroky
Postupne si teda prejdeme všetkými spomenutými alternatívami. Pozrieme si ako vytvárať Compound ViewGroup, Custom ViewGroup aj Custom View. Budeme sa držať Best-Practices a pokúsime sa zodpovedať najklasickejšie otázky, ktoré sa s vytváraním týchto komponentov spájajú. Stay Tuned and Buckle Up!!!