Android官方开发文档Training系列课程中文版:管理系统UI之隐藏状态条
原文地址:http://android.xsoftlab.net/training/system-ui/status.html
這節(jié)課將會介紹如何隱藏不同的版本的狀態(tài)條。隱藏狀態(tài)條可以使內(nèi)容展示區(qū)域更大,因此可以提供一種更強的身臨其境的用戶體驗。
含有狀態(tài)條的APP:
隱藏狀態(tài)條的APP,注意這里的ActionBar同樣也隱藏了。絕不要在沒有狀態(tài)條的時候還顯示ActionBar:
在Android 4.0以下的版本中隱藏狀態(tài)條
開發(fā)者可以通過設(shè)置WindowManager的標志來隱藏Android 4.0之前的狀態(tài)條。除此之外在清單文件中設(shè)置Activity的主題也可以達到同樣的效果。如果需要狀態(tài)條一直保持隱藏狀態(tài),那么在清單文件中設(shè)置主題是我們的首選方式:
<application ...android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >... </application>使用Activity主題的優(yōu)勢在于:
- 相對于動態(tài)設(shè)置來說更易于維護也減小了出錯的風險。
- 這會使得UI轉(zhuǎn)場更加平滑,因為系統(tǒng)在實例化Activity之前J就已經(jīng)得到了它需要的UI渲染信息(狀態(tài)條隱藏等等)。
開發(fā)者可以通過設(shè)置WindowManager的標志來達到同樣的目的。這種方法適合用戶與APP交互的時候使用。
public class MainActivity extends Activity {@Overrideprotected 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);}... }當你設(shè)置了WindowManager標志(不論是通過Activity的主題還是動態(tài)的設(shè)置),那么該標志則會一直保留,直到將該標志移除。
在Android 4.1以上的版本中隱藏狀態(tài)條
你可以通過使用setSystemUiVisibility()方法隱藏Android 4.1以上系統(tǒng)的狀態(tài)條。setSystemUiVisibility()為單個的View層級設(shè)置了UI標志;這些設(shè)置被整合進了Window層級。setSystemUiVisibility()比WindowManager的控制粒度更細。下面的代碼隱藏了狀態(tài)條:
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();要注意以下幾個方面:
- 一旦UI的標志被清除(比如,通過導(dǎo)航的方式離開了Activity),那么如果你想重新隱藏狀態(tài)條的話則需要重新設(shè)置這些標志。
- 在不同的地方設(shè)置UI標志還有些差異。如果在Activity的onCreate()方法中隱藏了系統(tǒng)條,這時用戶返回了桌面,那么系統(tǒng)條則會再次出現(xiàn)。當用戶重新打開Activity時,onCreate()不會被再次調(diào)用,所以系統(tǒng)條會一直保持可見。如果你想使系統(tǒng)條還保持原來的狀態(tài)的話,則需要在onResume()中或onWindowFocusChanged()中設(shè)置相應(yīng)的標志。
- setSystemUiVisibility()只有在View可見的時候設(shè)置才有效。
- 由導(dǎo)航的方式離開View會使由setSystemUiVisibility()設(shè)置的標志被清除。
使內(nèi)容顯示在狀態(tài)條的后面
在Android 4.1以上的版本中,你可以將應(yīng)用的內(nèi)容區(qū)域顯示在狀態(tài)條的后面,所以內(nèi)容區(qū)域的尺寸并不會隨著狀態(tài)條的隱藏顯示而變化。通過使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN標志來實現(xiàn)這一點。你可能還需要使用SYSTEM_UI_FLAG_LAYOUT_STABLE標志來輔助APP維持一個穩(wěn)定的布局狀態(tài)。
當你使用了這項方法,那么你就有責任確保APP UI的邊界部分不會被系統(tǒng)條所遮蓋。在很多情況下,你可以通過在布局文件中添加android:fitsSystemWindows=true屬性來處理這種情況。它會調(diào)整父ViewGroup的內(nèi)邊距來留出系統(tǒng)窗口的空間,這種方法足以應(yīng)對大多數(shù)的應(yīng)用。
隨著ActionBar的變換同步狀態(tài)條
在Android 4.1以上的版本中,為了避免重新調(diào)整布局的尺寸,當ActionBar顯示或隱藏時,你可以開啟ActionBar的Overlay Mode。當處于Overlay Mode下時,Activity的布局會使用所有的可用空間,就仿佛ActionBar不存在一樣,系統(tǒng)會將ActionBar繪制在布局的上面一層。這會使布局頂部的部分變的模糊,不過當ActionBar顯示或者隱藏時,系統(tǒng)并不會重寫調(diào)整布局的尺寸,這會使得轉(zhuǎn)場過程無縫對接。
為了可以使ActionBar開啟Overlay Mode,你需要創(chuàng)建一個自定義主題,并需要繼承已有的攜帶ActionBar的主題,并需要將android:windowActionBarOverlay屬性設(shè)置為true即可。
總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:管理系统UI之隐藏状态条的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nature发布第一张人类造血干细胞发育
- 下一篇: Android官方开发文档Trainin