官翻 隱藏狀態列

2021-07-15 18:43:41 字數 2950 閱讀 1423

官網原文:

隱藏狀態列

這個課程將描述如何在不同版本的上隱藏狀態列。隱藏狀態列(可選:導航欄)可以讓你的內容有更多的空間可以顯示,從而為使用者提供乙個更有沉浸式的體驗。

圖1展示了乙個可見的狀態列的程式介面:

圖1:狀態列可見

圖2展示了乙個不可見的狀態列的程式介面,注意:這個action bar也被隱藏了,你永遠也不要在狀態列隱藏的情況下顯示action bar。

圖2:狀態列不可見

在android4.0或以下版本中隱藏狀態列

你可以在android4.0(api 14)或者以下的版本中通過windowmanager標記來設定,你可以通過**中來設定或者在你的manifest檔案中對某個activity設定主題來達到目的。如果你的狀態列會一直被隱藏掉的話,在你的manifest檔案中對某個activity設定主題是首選的方式(嚴格來說:是覆蓋主題中的那個屬性),比如:

android:theme

="@android:style/theme.holo.noactionbar.fullscreen"

>

...使用theme主題的方式有如下幾個優點:

1、便於維護且相對於在**中用windowmanager的標記來說更不容易出錯

2、效果會更平滑,因為在例項化(渲染)activity的之前就已經被系統處理了。(此處翻譯得不太好,大體意思到了吧)

當然,你還是可以選擇用windowmanager的標記來做,如下方法可以簡單的在你的**中來控制狀態列的隱藏與顯示:

public

class

mainactivity

extends

activity

setcontentview(r

.layout

.activity_main);}

...}

當你設定windowmanager標記的時候(不管是**中設定還是theme中設定),除非你手動清除掉這個標記,這個狀態(指的是狀態列隱藏或者顯示的狀態)將會一直不變。

當你啟用了flag_fullscreen標記,你可以用flag_layout_in_screen 來設定你的activity的布局與螢幕的可用空間(大小或尺寸)相同,它可以在你隱藏或顯示狀態列的時候使內容區域保持不變。

在android4.1或以上版本中隱藏狀態列

你可以在android4.1(api level 16)以上中設定

setsystemuivisibility()來隱藏狀態列。setsystemuivisibility()是在單獨的view層級上設定ui標記;這些設定是聚合在window層級的。使用setsystemuivisibility()來設定ui標記可以讓你相對於使用windowmanager標記來說具有更大的操作性。如下是隱藏狀態列的乙個小片段:

view

decorview

=getwindow

().getdecorview

();// 隱藏狀態列

intuioptions

=view

.system_ui_flag_fullscreen

;decorview

.setsystemuivisibility

(uioptions

);// 如上所說,你永遠也不要在狀態列隱藏的情況下顯示action bar。所以這裡的隱藏就是有必要的。

actionbar

actionbar

=getactionbar

();actionbar

.hide

();

注意以下幾點:

responding to ui visibility changes

來討論如何監聽ui是否可見且作出相應操作。

或者onwindowfocuschanged()裡吧!

3、只如果你呼叫的這個view是可見的,setsystemuivisibility()

這個方法只會起效一次。

4、從這個檢視導航(跳轉)走了的話,這個view的setsystemuivisibility()標記將被清除掉。

讓內容在狀態列後面顯示

在android4.1或者以上版本,你可以設定應用的內容在狀態列後面顯示,所以它就不受狀態列的隱藏與顯示的影響而重新調整大小。這麼幹:用system_ui_flag_layout_fullscreen標記吧!你也可以用system_ui_flag_layout_stable

來幫助你的應用維持乙個穩定的布局。

當你使用了這個方法,你的應用ui中的關鍵區域(比如:地圖應用中的嵌入式控制項)的穩定不被系統欄覆蓋就變成你的責任了。這可能讓你的應用不可用(譯者注:我也沒搞懂這一句)。在大多數情況下,你可以通過在你的xml布局檔案中新增android:fitssystemwindows

這個屬性來解決(設定這個屬性為true),它會根據系統視窗來設定你的父容器的padding,這個方法對絕大多數的應用來說是可行的。

在某些情況下,不管怎樣,你可能需要修改預設的padding值來達到你的目的。通過重寫fitsystemwindows(rect insets)去直接操縱與系統欄的布置關係(像內容插入到系統的視窗一樣去佔據乙個已知大小空間)。當插入到系統視窗的內容改變後,fitsystemwindows()這個方法是被view層級呼叫的,想要允許系統視窗根據內容來調整可以通過重寫這個方法處理任何你想要的插入。

隱藏狀態列

1.如果只是想把當前頁面的狀態列隱藏的話,直接用下面的 就可以了 ios6 2.如果是想把整個應用程式的狀態列都隱藏掉,操作如下 在info.plist上新增一項 status bar is initially hidden,value為yes 3.方法一 設定 現在ios7已經更改為透明,並且不占...

隱藏狀態列

方法一 getwindow setflags windowmanager.layoutparams.flag fullscreen windowmanager.layoutparams.flag fullscreen requestwindowfeature window.feature no ti...

iOS隱藏狀態列

ios6和ios7在隱藏 status bar 三種方式比較 storyboard 介面上選中uiviewcontroller,最右邊simulated metrics找到 status bar 設定成 none viewcontroller ios 7 info.plist 不但要在info.pl...