透明狀態(tài)欄

這四篇挺好###


由沉浸式狀態(tài)欄引發(fā)的血案
Android開發(fā):Translucent System Bar 的最佳實(shí)踐
Android 系統(tǒng)狀態(tài)欄沉浸式/透明化完整解決方案
薄荷Toolbar(ActionBar)的適配方案


這個(gè)小伙很不錯(cuò)###

fanKarl/TranslucentBars


我寫了個(gè)小demo,為了方便以后自己復(fù)用的,地址戳戳看


  • 方法一(代碼實(shí)現(xiàn)): 以下這段代碼的作用是:在4.4以上狀態(tài)欄透明、允許AppBarLayout布局?jǐn)U展至狀態(tài)欄
    /**
     * 配置狀態(tài)欄
     */
    private void setTransparentBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }
        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_LAYOUT_NO_LIMITS);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        }
    }
  • 方法二(xml中配置): 在values-v19下styles.xml文件中添加如下代碼——AppBarLayout的內(nèi)容布局就可以擴(kuò)展至系統(tǒng)狀態(tài)欄,狀態(tài)欄會(huì)覆蓋在toolbar上
<resources>
    <style name="AppTheme" parent="@style/AppBaseTheme">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

方法二會(huì)這樣↓↓↓↓↓↓,so……還是用方法一吧,其實(shí)我是全都寫上的,即代碼實(shí)現(xiàn)+xml配置###

Paste_Image.png

AppBarLayout背景顏色設(shè)置,后面布局中修改Background會(huì)覆蓋主題中的colorPrimary###

Paste_Image.png
Paste_Image.png

給Toolbar設(shè)置android:layout_marginTop###

在values, values-v19兩個(gè)文件夾下分別聲明toolbar_margin_top變量,values文件夾下值為0dp,而values-v19文件夾下值為25dp.

效果圖###

效果圖.gif

再啰嗦一句###

在這個(gè)方法中,經(jīng)測試發(fā)現(xiàn)fitSystemWindow=“true”不起作用

第二天……###

第二天,我覺得昨天的還是有瑕疵,我記得我上次弄透明狀態(tài)欄fitSystemWindow=“true”就起作用了啊,經(jīng)過一番,最后算是弄明白了,原因是我代碼實(shí)現(xiàn)的多了這么一句

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
/** Window flag: allow window to extend outside of the screen. */
public static final int FLAG_LAYOUT_NO_LIMITS   = 0x00000200;

然后我去掉了上面這一句,布局中也去掉了Toolbar的
android:layout_marginTop="@dimen/toolbar_margin_top",
并且給AppBarLayout加上fitSystemWindow=“true”,但是4.4好用,5.1就不行了,真是眾口難調(diào)啊,所以還是按照之前的方法來,畢竟我們不需要知道茴香豆的“茴”字有幾種寫法,只需要掌握一種確實(shí)好用的。

總結(jié)###

兩步走:
1、上述代碼實(shí)現(xiàn)的方法,一般寫在BaseActivity中
2、在各自的布局中,需要浸入狀態(tài)欄的view——肯定是位于整個(gè)布局最上端了(這就是句廢話了)——設(shè)置內(nèi)邊距或者外邊距了。

補(bǔ)充

本篇文章總結(jié)的方法僅在小米手機(jī)和模擬器上測試過,之后在錘子手機(jī)上測試發(fā)現(xiàn)錘子手機(jī)狀態(tài)欄僅能實(shí)現(xiàn)半透明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容