Android-sovelluksessa teemojen valinta riippuu usein laitteessa käytettävästä käyttöjärjestelmän versiosta. Tämä tarkoittaa, että sama sovellus voi näyttää erilaiselta eri Android-versioilla, jos teema mukautetaan oikein. Tämän mahdollistamiseksi Android tarjoaa resurssien valinnan mekanismin, jonka avulla voidaan määrittää, mikä teema sovellukselle valitaan sen mukaan, minkälaista Android-versiota käyttäjä käyttää.
Aloittaessamme tämän prosessin on tärkeää ymmärtää kolme keskeistä teemaa, joita Android tukee: Theme.Gingerbread, Theme.Holo ja Theme.Material. Gingerbread oli käytössä ennen Honeycombia (API 11), ja Holo-teema tuli käyttöön Android Honeycombissa (API 11). Material-teema puolestaan tuli Android Lollipopissa (API 21) ja on nykyisin laajasti käytössä useimmissa sovelluksissa.
Teeman määrittäminen AndroidManifest.xml-tiedostossa
Ensimmäinen askel on määrittää sovellukselle teema, joka liittyy sen käytettävään Android-versioon. Tämä tapahtuu muokkaamalla AndroidManifest.xml -tiedostoa. On tärkeää huomata, että sovelluksella voi olla oma teemansa, joka määrittää sen ulkoasun ja käytettävyyden. Jos sovellus käyttää AppCompatActivity-luokkaa, voidaan valita AppCompat-teemoja, mutta tässä esimerkissä keskitymme tavallisiin teemoihin, joita käytetään suoraan laitteesta riippuen.
Teeman valinta API-version mukaan
Kun määritämme teemaa, voimme käyttää Androidin resurssivalintamekanismia, joka tarkistaa laitteelle asennetun Android-version ja valitsee oikean teeman automaattisesti. Tämä voidaan saavuttaa luomalla eri values-hakemistoja eri API-tasoille. Esimerkiksi:
-
values-v11: Tätä hakemistoa käytetään Android Honeycombissa (API 11), jolloin määritämme, että käytämme
Theme.Holo-teemaa. -
values-v21: Tämä hakemisto on tarkoitettu Lollipopin (API 21) ja sitä uudemman version teemoille, ja siinä määritämme
Theme.Material-teeman.
Resurssivalinta toimii niin, että Android tarkistaa, minkä API-version laite käyttää, ja valitsee sen perusteella oikean teeman. Jos laitteessa on API 11, sovellus käyttää Holo-teemaa. Jos taas laite käyttää API 21:ä tai sitä uudempaa, sovellus valitsee Material-teeman.
Sovelluksen rakentaminen
Kun olet määrittänyt teemojen resurssit oikeisiin hakemistoihin, voit muokata styles.xml-tiedostoa määrittämään, mitä teemoja sovellus käyttää. Voit tehdä tämän seuraavasti:
-
Luo
values-v11javalues-v21-hakemistot ja luo kummassakin hakemistossa omastyles.xml-tiedosto. -
Määritä teema kummassakin tiedostossa:
Theme.HoloAPI 11:lle jaTheme.MaterialAPI 21:lle. -
Muokkaa
AndroidManifest.xml-tiedostoa niin, että se käyttää tätä teemaa:
Näin sovellus voi valita teeman automaattisesti riippuen siitä, minkä Android-version käyttäjä laitteessaan käyttää.
Tärkeät huomiot ja lisäykset
Vaikka tässä esitetyt ohjeet mahdollistavat teemojen valinnan Android-version mukaan, on tärkeää huomioida, että Androidin resurssivalinta ei perustu pelkästään API-tasoon. Voimme myös määrittää resursseja, jotka valitaan esimerkiksi laitteen näytön koon, tiheyden tai jopa sen mukaan, onko laite vaakasuorassa vai pystysuorassa. Tämä antaa kehittäjille mahdollisuuden optimoida sovellusten ulkoasun ja käytettävyyden erilaisten laitteiden ja käyttötilanteiden mukaan.
Resurssivalinnan hyödyllisyys tulee esiin erityisesti silloin, kun kehitetään sovelluksia, jotka tukevat laajasti eri Android-versioita ja laitteita. Se varmistaa, että sovellus näyttää ja tuntuu optimaaliselta kaikilla laitteilla, riippumatta siitä, mitä käyttöjärjestelmäversiota ne käyttävät. Androidin resurssivalinta on tehokas työkalu, jonka avulla sovelluksen käyttäjäkokemusta voidaan parantaa huomattavasti.
Miten hallita käyttöliittymän piilottamista ja esittämistä Android-sovelluksessa?
Jotta voisimme piilottaa ja näyttää Androidin järjestelmäkäyttöliittymän (System UI), meidän täytyy käsitellä käyttöliittymän tilaa ja reagoida käyttäjän vuorovaikutukseen. Tämä prosessi on hyödyllinen, jos haluamme luoda sovelluksia, jotka tarjoavat täysin immersiivisen kokemuksen, kuten pelit tai multimediakokemukset, joissa järjestelmän valikot tai tilapalkit eivät häiritse käyttöä. Tässä kappaleessa käsittelemme, miten tämä toimii käytännössä ja mitä lisäominaisuuksia voimme ottaa käyttöön.
Ensimmäinen askel on luoda kaksi menetelmää, jotka hallitsevat käyttöliittymän tilaa. hideSystemUi()-metodi piilottaa järjestelmäkäyttöliittymän ja showSystemUI()-metodi palauttaa sen näkyviin. Tämä toteutetaan setSystemUiVisibility()-kutsun avulla, joka määrittää, mitkä käyttöliittymän osat ovat näkyvissä ja mitkä piilotettuina. Käyttämällä erilaisia lippuja, kuten SYSTEM_UI_FLAG_FULLSCREEN ja SYSTEM_UI_FLAG_HIDE_NAVIGATION, voimme hallita, miten ja milloin tilapalkki ja navigointipalkki ilmestyvät tai katoavat.
Kun haluamme, että järjestelmäkäyttöliittymä piiloutuu automaattisesti ja pysyy poissa näkyvistä, voimme käyttää SYSTEM_UI_FLAG_IMMERSIVE_STICKY-lippua. Tämä pitää järjestelmän valikot piilossa, vaikka käyttäjä tekisi muita vuorovaikutuksia. Jos haluamme vain himmentää järjestelmän käyttöliittymää ilman, että se katoaa kokonaan, voimme käyttää SYSTEM_UI_FLAG_LOW_PROFILE-lippua. Tämä dimmaa esimerkiksi navigointipalkin ilman, että se katoaa kokonaan.
Tärkeä osa tätä toteutusta on GestureListener, joka reagoi käyttäjän kosketuksiin ruudulla. Kun käyttäjä napsauttaa ruutua, järjestelmä tarkistaa, onko toiminto tarpeen piilottaa vai näyttää käyttöliittymä. Tämä toteutetaan onSingleTapUp()-metodilla, joka vaihtaa tilaa kosketuksen jälkeen. Näin voimme luoda täysin upotetun kokemuksen, joka reagoi käyttäjän eleisiin.
Samalla on hyvä huomioida, että käyttäjän eleet eivät aina ole yksinkertaisia. Koska sovelluksen käyttöliittymä voi sisältää monimutkaisempia toimintoja, eleiden tunnistamiseen kannattaa käyttää GestureDetectorCompat-luokkaa, joka mahdollistaa tarkempien ja monimutkaisempien eleiden, kuten pyyhkäisyjen ja kaksoiskosketusten, käsittelyn. Näin saamme tarkemman kontrollin siitä, miten sovellus reagoi käyttäjän vuorovaikutukseen.
Jatkamme syventymistä lisätoimintoihin, kuten järjestelmäkäyttöliittymän himmentämiseen ja muihin mahdollisiin parannuksiin, joita voidaan tehdä käyttäjäkokemuksen parantamiseksi. Tällöin voidaan myös harkita järjestelmäpalkkien tekemistä läpinäkyviksi tai käyttää temaattisia asetuksia, jotka mahdollistavat järjestelmäkäyttöliittymän käytön päällekkäin muiden elementtien kanssa. Näillä toimenpiteillä voidaan hallita käyttöliittymän ulkoasua ja käyttäjän kokemus voi olla täysin räätälöity sovelluksen tarpeiden mukaan.
Kun ohjelmoimme sovellusta, on tärkeää muistaa, että järjestelmäkäyttöliittymän piilottaminen ja näyttäminen ei ole vain esteettinen toimenpide. Se voi parantaa sovelluksen käytettävyyttä ja auttaa keskittymään tärkeisiin elementteihin, kuten sisällön esittämiseen. Käytön aikana käyttäjät voivat kokea sovelluksen sujuvammaksi ja vähemmän häiritseväksi, kun tarpeettomat elementit, kuten tilapalkki, eivät vie huomiota.
Lisäksi kannattaa harkita, että mikäli haluamme hallita sovelluksen ulkoasua ja järjestelmäkäyttöliittymän käyttäytymistä tarkemmin, voimme muokata sovelluksen teemoja ja käyttää läpinäkyviä järjestelmäpalkkeja. Läpinäkyvät palkit voivat antaa sovellukselle modernin ja kevyen ulkoasun, joka sulautuu paremmin sovelluksen sisällön kanssa.
Kuinka tallentaa ja lukea tietoa Android-sovelluksessa
Kun kehität Android-sovelluksia, tiedon tallentaminen ja lukeminen on usein keskeinen osa käyttäjäkokemusta. Erityisesti, kun kyseessä on henkilökohtaiset asetukset tai käyttäjän syöttämät tiedot, haluat varmistaa, että nämä tiedot säilyvät sovelluksen sulkemisen jälkeen. Android tarjoaa useita tapoja tallentaa tietoa, ja tässä käsitellään kahta tärkeintä menetelmää: SharedPreferences ja tiedostojen tallentaminen sisäiseen tallennustilaan.
Yksi yleisimpiä tapoja tallentaa pieniä tietoja, kuten käyttäjän syöttämiä nimiä, on käyttää SharedPreferences-mekanismia. Tämä on erityisen hyödyllinen, kun haluat säilyttää yksinkertaisia avain-arvo-pareja, jotka säilyvät sovelluksen sulkemisen ja uudelleenkäynnistyksen jälkeen. Voit käyttää SharedPreferencesia esimerkiksi muistamaan käyttäjän nimen ja näyttää sen sovelluksessa seuraavalla kerralla, kun käyttäjä avaa sovelluksen.
Tässä on esimerkki, kuinka voit tallentaa ja ladata käyttäjän nimen SharedPreferencesin avulla:
Tässä koodissa, aluksi tarkistamme, onko käyttäjän nimi tallennettu SharedPreferencesiin. Jos ei, sovellus näyttää "Hello". Jos nimi on tallennettu, se näyttää käyttäjän nimen ja tervehdyksen. Nimen tallentaminen tapahtuu saveName-metodissa, jossa käyttäjä syöttää nimensä EditText-kenttään, ja se tallennetaan SharedPreferencesiin.
Tiedostojen tallentaminen sisäiseen tallennustilaan
Kun haluat tallentaa suurempia määriä tietoa, kuten tekstidokumentteja, on parempi käyttää Androidin sisäistä tallennustilaa. Tämä mahdollistaa tiedostojen lukemisen ja kirjoittamisen sovelluksen yksityiseen tallennustilaan. Sisäinen tallennustila on turvallinen, sillä tiedostoja ei voi suoraan käyttää muiden sovellusten tai käyttäjien toimesta. Tämä on tärkeää erityisesti, jos käsittelet arkaluontoista tietoa.
Tässä on esimerkki siitä, kuinka voit kirjoittaa ja lukea tiedostoja sisäisestä tallennustilasta:
Tässä esimerkissä kirjoitamme käyttäjän syöttämän tekstin EditText-kentästä sisäiseen tiedostoon testfile.txt ja luemme sen takaisin. writeFile-metodi tallentaa tiedon, ja readFile-metodi lukee tiedoston sisällön ja näyttää sen EditText-kentässä.
Väliaikainen tietojen tallentaminen välimuistiin
Jos tietoja ei tarvitse säilyttää pysyvästi, vaan vain väliaikaisesti, Androidin välimuisti voi olla hyödyllinen. Välimuistiin tallennettavat tiedot voivat sisältää esimerkiksi uutisartikkeleita, joita käyttäjä on lukenut, ja joita ei tarvitse ladata uudelleen, jos ne ovat jo olemassa laitteella. Välimuistissa olevat tiedot voidaan poistaa automaattisesti, jos laitteessa ei ole tarpeeksi tallennustilaa.
Välimuistiin tallentaminen onnistuu käyttämällä getCacheDir()-metodia, joka palauttaa välimuistin kansion tiedostona. On kuitenkin hyvä pitää mielessä, että välimuisti saattaa tyhjentyä järjestelmän toimesta, joten sitä ei tulisi käyttää tiedoille, jotka ovat tärkeitä sovelluksen toiminnalle.
Tiedostojen tallentaminen ulkoiseen tallennustilaan
Jos haluat antaa käyttäjille mahdollisuuden tallentaa ja lukea tiedostoja ulkoisessa tallennustilassa, prosessi on hyvin samanlainen kuin sisäisen tallennustilan käytössä, mutta sinun on saatava lupa tallentamiseen ja lukuun ulkoiselta tallennustilalta. Ulkoinen tallennustila voi olla muistitikku tai SD-kortti, ja siihen tallennettavat tiedostot voivat olla käyttäjän helposti nähtävissä ja muokattavissa. On tärkeää tarkistaa, onko ulkoinen tallennustila käytettävissä ennen sen käyttöä, koska kaikki laitteet eivät välttämättä tue tätä vaihtoehtoa.
Tiedostojen tallentaminen ulkoiseen tallennustilaan saattaa vaatia erityisiä oikeuksia, ja sinun on varmistettava, että käyttäjällä on tarvittavat luvat ennen tiedoston käsittelyä.
Kuinka luoda ja piirtää muotoja OpenGL:llä Android-sovelluksessa
OpenGL:n käyttö Android-sovelluksissa tarjoaa mahdollisuuden luoda tehokkaita ja visuaalisesti kiinnostavia grafiikoita. Yksi yleisimmistä tavoista piirtää yksinkertaisia muotoja on käyttää GLSurfaceView-luokkaa, joka toimii pintoina OpenGL-piirtämiselle. Tässä luvussa tarkastelemme, kuinka voit luoda mukautetun GLSurfaceView-luokan ja käyttää sitä yksinkertaisen kolmion piirtämiseen.
Aloitamme luomalla GLSurfaceView-luokan, joka toimii OpenGL-piirtämiselle tarkoitetun pinnan alustana. Tämä on hyvin samankaltainen kuin Canvas tai SurfaceView-objektit, mutta se on optimoitu erityisesti OpenGL-käyttöön.
Tässä luokassa määritellään rendereri, joka huolehtii itse piirtämisestä. Rendererissä määritellään kolmen pääcallbackin toteutukset: onSurfaceCreated(), onDrawFrame() ja onSurfaceChanged().
Tässä vaiheessa renderöinti on määritelty, mutta ei vielä piirretty mitään. Jatkamme luomalla yksinkertaisen kolmion, joka on perusmuoto OpenGL:ssä. Muista, että OpenGL:ssä vertexien järjestyksellä on suuri merkitys, sillä se määrittää muodon etu- ja takapuolen. Yleisesti ottaen vertexit määritellään vastapäivään.
OpenGL:n koordinaatistossa (X, Y, Z) keskitetään alkuperä pisteeseen (0, 0, 0), jolloin ruudun reuna-alueet sijaitsevat seuraavilla koordinaateilla:
-
Ylävasen: (-1.0, 1.0, 0)
-
Ylärakas: (1.0, 1.0, 0)
-
Alavasen: (-1.0, -1.0, 0)
-
Alarakas: (1.0, -1.0, 0)
Z-akseli tulee ruudusta suoraan kohti käyttäjää tai menee taaksepäin. Kolmio on sopiva aloitusmuoto, sillä se on yksinkertainen ja helppo ymmärtää.
Kolmion määrittäminen vaatii myös shaderien luomisen. Vertex shader määrittelee, kuinka piirtämisen perusmuodot sijoitetaan näyttöön, ja fragment shader taas määrittää värin. Nämä määritellään OpenGL Shading Language (GLSL) -kielellä ja liitetään OpenGL-ohjelmaan.
Shaderit ladataan, käännetään ja liitetään OpenGL-ohjelmaan seuraavasti. Tämä mahdollistaa sen, että saamme ohjelman, joka voi piirtää kolmiota ruudulle.
Tässä vaiheessa luodaan tarvittavat bufferit ja alustetaan kaikki renderöintiin tarvittavat tiedot. Piirtämisprosessi tapahtuu draw()-metodissa, jossa kaikki vertexit määritellään ja värit lisätään.
Tämä prosessi luo yksinkertaisen piirron kolmion muodossa. On tärkeää huomata, että OpenGL on hyvin matalan tason teknologia, joka vaatii tarkkaa säätöä shaderien ja muiden resurssien osalta.
Mitä lukijan on tärkeää ymmärtää
OpenGL:n käyttö vaatii syvällistä ymmärrystä grafiikkaprosessoinnin perusteista, kuten shaderien roolista ja siitä, kuinka vertexit ja värit määritellään. OpenGL:n koordinaatistoon liittyminen saattaa alkuun tuntua sekavalta, mutta sen ymmärtäminen on välttämätöntä, jotta voidaan luoda tarkkoja ja tehokkaita grafiikoita. Myös shaderien käyttö on keskeinen osa OpenGL-ohjelmointia, ja niiden optimointi voi merkittävästi parantaa sovelluksen suorituskykyä.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский