Tällä oppitunnilla kuvataan tilapalkin piilottaminen Androidin eri versioissa. Tilapalkin (ja valinnaisesti myös navigointipalkin) piilottaminen antaa sisällön käyttää enemmän näyttötilaa ja tarjoaa siten vaikuttavamman käyttökokemuksen.

Kuvassa 1 on sovellus, jossa tilapalkki on näkyvissä:

Kuva 1. Sovellus, jossa tilapalkki on näkyvissä. Näkyvä tilarivi.

Kuvassa 2 on sovellus, jossa on piilotettu tilarivi. Huomaa, että myös toimintopalkki on piilotettu. Toimintopalkkia ei saa koskaan näyttää ilman tilariviä.

Kuva 2. Piilotettu tilapalkki.

Tilapalkin piilottaminen Android 4.0:ssa ja sitä alemmissa versioissa

Voit piilottaa tilapalkin Android 4.0:ssa (API-taso 14) ja sitä alemmissa versioissa asettamallaWindowManager liput. Voit tehdä tämän ohjelmallisesti tai asettamalla toimintoteeman sovelluksesi manifestitiedostoon. Toimintoteeman asettaminen sovelluksen manifestitiedostoon on suositeltavin lähestymistapa, jos tilapalkin pitäisi aina pysyä piilossa sovelluksessa (vaikka tarkalleen ottaen voit halutessasi ohittaa teeman ohjelmallisesti). Esimerkiksi:

<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>

Toimintoteeman käyttämisen edut ovat seuraavat:

  • Se on helpompi ylläpitää ja vähemmän virhealtis kuin lipun asettaminen ohjelmallisesti.
  • Se johtaa sujuvampiin käyttöliittymän siirtymiin, koska järjestelmällä on tarvittavat tiedot käyttöliittymän renderöintiin ennen sovelluksen pääaktiviteetin instansointia.

Vaihtoehtoisesti voit asettaa WindowManager lippuja ohjelmallisesti.Tämä lähestymistapa helpottaa tilarivin piilottamista ja näyttämistä, kun käyttäjä on vuorovaikutuksessa sovelluksesi kanssa:

Kotlin

class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ...}

Java

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ...}

Kun asetat WindowManager-lipukkeet (olipa kyse sitten aktiviteettiteemasta tai ohjelmallisesti tehdyistä määrityksistä), lipukkeet pysyvät voimassa, jollei sovelluksesi poista niitä.

Voit käyttääFLAG_LAYOUT_IN_SCREENasettaaksesi toimintoasettelun käyttämään samaa näyttöaluetta, joka on käytettävissä, kun olet ottanut käyttöönFLAG_FULLSCREEN. Tämä estää sisällön koon muuttamisen, kun tilapalkki piilotetaan ja näytetään.

Tilapalkin piilottaminen Android 4.1:ssä ja uudemmissa versioissa

Voit piilottaa tilapalkin Android 4.1:ssä (API-taso 16) ja uudemmissa versioissa käyttämällä setSystemUiVisibility():tä.setSystemUiVisibility() asettaa käyttöliittymälippujen asetukset yksittäisen näkymän tasolla; nämä asetukset kootaan yhteen ikkunatasolle. Käyttämällä setSystemUiVisibility():tä UI-lippujen asettamiseen voit hallita järjestelmäpalkkeja tarkemmin kuin käyttämällä WindowManager-lippuja. Tämä pätkä piilottaa tilapalkin:

Kotlin

// Hide the status bar.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN// Remember that you should never show the action bar if the// status bar is hidden, so hide that too if necessary.actionBar?.hide()

Java

View decorView = getWindow().getDecorView();// Hide the status bar.int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);// Remember that you should never show the action bar if the// status bar is hidden, so hide that too if necessary.ActionBar actionBar = getActionBar();actionBar.hide();

Huomaa seuraavaa:

  • Kun UI-liput on poistettu (esimerkiksi navigoimalla pois toiminnasta), sovelluksesi on nollattava ne, jos haluat piilottaa palkit uudelleen.Kohdassa UI-näkyvyyden muutoksiin reagoiminen käsitellään sitä, miten kuunnella UI-näkyvyyden muutoksia, jotta sovelluksesi voi reagoida niihin sen mukaisesti.
  • Missä asetat UI-liput, sillä on merkitystä. Jos piilotat järjestelmäpalkit aktiviteettisi onCreate()-metodissa ja käyttäjä painaa Koti-painiketta, järjestelmäpalkit tulevat takaisin näkyviin. Kun käyttäjä avaa aktiviteetin uudelleen, onCreate()-metodia ei kutsuta, joten järjestelmäpalkit jäävät näkyviin. Jos haluat, että järjestelmän käyttöliittymämuutokset pysyvät yllä, kun käyttäjä siirtyy sisään ja ulos aktiviteetista, aseta UI-liput onResume()tai onWindowFocusChanged().
  • Metodilla setSystemUiVisibility() on vaikutusta vain, jos näkymä, josta sitä kutsutaan, on näkyvissä.
  • Näkymästä poispäin navigointi aiheuttaa setSystemUiVisibility():llä asetettujen lippujen tyhjentämisen.

Sisällön saaminen näkymään tilarivin takana

Android 4:ssä.1 ja uudemmissa versioissa voit asettaa sovelluksesi sisällön näkymään tilapalkin takana, jolloin sisältö ei muuta kokoaan tilapalkin piilottaessa ja näyttäessä.Voit tehdä tämän käyttämälläSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.Saatat myös joutua käyttämäänSYSTEM_UI_FLAG_LAYOUT_STABLE auttaaksesi sovellustasi pitämään yllä stabiilia asettelua.

Kun käytät tätä lähestymistapaa, sinun vastuullasi on varmistaa, että kriittiset osat sovelluksen käyttöliittymästä (esimerkiksi karttasovelluksen sisäänrakennetut ohjaimet) eivät joudu järjestelmäpalkkien peittoon. Tämä voi tehdä sovelluksestasi käyttökelvottoman. Useimmissa tapauksissa voit hoitaa tämän lisäämällä XML-asettelutiedostoon android:fitsSystemWindows-attribuutin, jonka arvoksi on asetettu true. Tämä säätää vanhemman ViewGroup:n pehmusteen niin, että järjestelmäikkunoille jää tilaa. Tämä riittää useimmille sovelluksille.

Jossain tapauksissa saatat kuitenkin joutua muuttamaan oletuspadotusta saadaksesi sovelluksellesi halutunlayoutin. Jos haluat suoraan manipuloida sitä, miten sisältösi asettuu suhteessa järjestelmäpalkkeihin (jotka vievät tilaa, jota kutsutaan ikkunan ”sisällön sisäkkäisiksi”), ohita fitSystemWindows(Rect insets). fitSystemWindows()-metodia kutsutaan katseluhierarkiassa, kun ikkunan sisällön sisäkkäiset kohdat ovat muuttuneet, jotta ikkuna voi säätää sisältöään sen mukaisesti. Ohittamalla tämän metodin voit käsitellä inserttejä (ja siten sovelluksesi ulkoasua) haluamallasi tavalla.

Vastaa

Sähköpostiosoitettasi ei julkaista.