android沈浸式狀態列、變色狀態列、透明狀態列、修改狀態列顏色及透明

來源:互聯網
上載者:User

android沈浸式狀態列、變色狀態列、透明狀態列、修改狀態列顏色及透明

首先我要區分清楚沈浸式狀態列與變色狀態列。

沈浸式狀態列指的是,狀態列隱藏,在手指做了相關操作後,狀態列顯示出來,例如視頻播放器,在播放視頻時是隱藏狀態列的,但是點擊螢幕的時候,狀態列會顯示出來,再例如文本閱讀器,在閱讀的時候是全屏的,然後從螢幕上方下滑或者下方上劃,虛擬鍵和狀態列出現了,但卻是直接覆蓋在程式文字上的,這是所謂的沈浸式狀態列。
那麼大家平時所說的狀態列與導覽列顏色相同,或者透明,指的是變色狀態列,或者透明狀態列。
對於這兩個概念的理解,大家可以參考http://www.androidchina.net/3520.html。

v19(4.4)以後開始支援android:windowTranslucentStatus屬性,透明狀態列,而v21(5.0)以後出現變色狀態列,可以自由設定狀態列顏色。
通過這兩個新特性,可以協助我們快速的實現4.4以後的狀態列與app的導覽列顏色相同。

實現變色導覽列主要是通過styles裡面的theme來實現的:

    

接下來定義主題BaseAppTheme,繼承於上面定義的AppTheme.Base主題,該主題定義了三個顏色,分別指定狀態列、toolbar和頁面中重點控制項的顏色(顏色自己去定義)。

對於AppCompat主題中,各個顏色屬性的含義,可以參考

然後定義一個AppTheme,繼承於BaseAppTheme,

5.0:建立“values-v21\styles.xml”

在裡面定義適用與5.0系統的AppTheme,在5.0系統中提出的變色狀態列,因此這裡我們只需定義一個AppTheme繼承於BaseAppTheme代碼如下:

啟動並執行結果是,在4.4系統上,完全正常顯示,而在5.0上,toolbar正常顯示了透明色,但是狀態列顯示的是灰色透明色
4.4系統:

5.0系統:

原因應該是,4.4系統支援的就是透明狀態列,所以只需要將狀態列顏色設為透明,即可到達效果。
而5.0支援的是變色狀態列,得到的效果與我們預期不同,特做如下處理:

在代碼中設定,判斷當sdk大於等於5.0時,執行以下代碼

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {    Window window = getWindow();    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);    window.setStatusBarColor(Color.TRANSPARENT);}

運行後,在4.4以及5.0系統上都能實現透明效果了,如下:

源碼下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.