Android狀態(tài)欄沉浸式實現(xiàn),更改狀態(tài)欄顏色烤宙,設(shè)置透明狀態(tài)欄

實現(xiàn)狀態(tài)欄沉浸式(透明狀態(tài)欄)的幾種方式:

1、通過第三方j(luò)ar包
2、設(shè)置狀態(tài)欄透明怠惶,頂部View拉伸一個狀態(tài)欄高度(重點講)
3、利用toolbar中的colorPrimaryDark設(shè)置狀態(tài)欄顏色

注意:需要注意適配的問題轧粟,狀態(tài)欄透明需要Android4.4以上策治,而直接改狀態(tài)欄顏色需要Android5.0以上。

1逃延、通過第三方j(luò)ar包

上網(wǎng)搜SystemBarTint览妖,這里不做介紹了

2、設(shè)置狀態(tài)欄透明揽祥,頂部View拉伸一個狀態(tài)欄高度

這種方法是思路是這樣的讽膏,將狀態(tài)欄設(shè)置成透明,相當(dāng)于全屏拄丰,這個時候狀態(tài)欄的內(nèi)容會和布局的內(nèi)容重疊府树,為頂部View拉伸一個狀態(tài)欄的高度可去掉這種重疊俐末。

設(shè)置狀態(tài)欄兩種方法:

第一種:在styles.xml文件定義主題,在AndroidManifest.xml中對需要沉浸式的activity引用主題奄侠。
比如這樣卓箫,設(shè)置無標(biāo)題,狀態(tài)欄透明(如果繼承appcomtActivity的話垄潮,有可能設(shè)置無標(biāo)題要用另一種方式烹卒,這個先不討論,自己找方法)

<resources>
    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>
    <style name="TranslucentTheme" parent="AppBaseTheme">
          <!--在Android 4.4之前的版本上運行-->
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

考慮到適配問題弯洗,創(chuàng)建文件夾values-v19旅急,同時創(chuàng)建styles.xml文件,用來區(qū)分4.4以上情況牡整,values-v19中加上<item name="android:windowTranslucentStatus">true</item>

    <style name="TranslucentTheme" parent="AppBaseTheme">
          <!--在Android 4.4以上的版本上運行-->
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowTranslucentStatus">true</item>
    </style>

然后在AndroidManifest文件中設(shè)置主題藐吮,如:

        <activity
            android:name=".CommunityActivity"
            android:theme="@style/TranslucentTheme"
            android:label="Community" >
        </activity>

這種方法不好的一點就是,在Android5.0以上即使設(shè)置了透明逃贝,我這仍會出現(xiàn)半透明的遮罩谣辞,下面這種方法可以通過修改狀態(tài)欄顏色解決,看個人喜好吧沐扳。

第二種:直接在java代碼中實現(xiàn)泥从,放在activity的setContentView后面,上代碼:

//Android5.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);
}
//Android4.4以上,5.0以下
else if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT){
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
拉伸View一個狀態(tài)欄高度的兩種方法:

第一種:在頂部的View布局(一般是Toolbar或者自定義的布局)中加入:android:fitsSystemWindows="true"
且需android:layout_height="wrap_content"
這樣系統(tǒng)會自動幫我們將該View設(shè)置一個paddingTop沪摄,解決重疊歉闰。
但是在一些有EditText的情況下可能會出現(xiàn)問題,這個留到后面講卓起。
第二種:在Java代碼中實現(xiàn)和敬,在activity中敲下面代碼:

//計算狀態(tài)欄高度,加到View上
int statusBarHeight = StatusBarUtil.getStatusBarHeight(this);
mTopLayout.setPadding(0,statusBarHeight,0,0);

獲取狀態(tài)欄的方法getStatusBarHeight:

    public static int getStatusBarHeight(Context context) {
        Resources resources = context.getResources();
        int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");
        int height = resources.getDimensionPixelSize(resourceId);
        return height;
    }

mTopLayout是我頂部的View(Toolbar同理)戏阅,上面代碼要在findViewById后才能調(diào)用昼弟。
我個人看來,這種方法更可控奕筐,后面會講到舱痘。

可能出現(xiàn)的問題及解決方案:
  • 有EditText的情況:

如果是通過android:fitsSystemWindows="true"來自動拉伸頂部的view的話,那么在有EditText的情況下离赫,由于會彈出軟鍵盤芭逝,所以這里測量的拉伸距離會增加一個軟鍵盤的高度。
解決辦法有三種:
一是在AndroidManifest文件設(shè)置Activity的軟鍵盤的屬性android:windowSoftInputMode="adjustPan"這樣整個布局向上平移渊胸,也就不存在拉伸的問題旬盯。
二是把android:fitsSystemWindows="true"放在根布局下,把根布局的背景色改成想要的狀態(tài)欄色,不過這可能會有個問題胖翰,彈起鍵盤的過程中可能會閃屏接剩,顏色是根布局背景色(本身就會閃屏,只不過原本是白色萨咳,看不出)懊缺。可以這么解決培他,弄一張背景圖鹃两,圖片上邊緣是狀態(tài)欄色,下面是白色就可以了舀凛,嫌麻煩的話基本可以放棄了怔毛。
三是不用設(shè)置android:fitsSystemWindows="true"這種方法,而是上面提到的第二種方法腾降,在java代碼中實現(xiàn),個人比較推薦碎绎。

  • 上一個activity有EditText的情況:

若當(dāng)前activity設(shè)置的是android:fitsSystemWindows="true"螃壤,那么在上一個activity的軟鍵盤打開狀態(tài),直接退回當(dāng)前activity筋帖,會出現(xiàn)頂部view過度拉伸的現(xiàn)象奸晴,如下圖:


解決方法是當(dāng)前activity用上面提到的第二張方法,在java代碼實現(xiàn)日麸。

3寄啼、利用toolbar中的colorPrimaryDark設(shè)置狀態(tài)欄顏色

這方法只要在網(wǎng)上搜Toolbar的相關(guān)教程,都有相關(guān)的內(nèi)容代箭,主要是通過直接設(shè)置狀態(tài)欄的顏色來達(dá)到效果墩划,不過在低版本無效,只適用于Android5.0以上嗡综。

基于學(xué)習(xí)需要乙帮,作如上總結(jié),希望能幫助到需要的人以及提醒自己不斷完善极景,共同進(jìn)步察净。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盼樟,隨后出現(xiàn)的幾起案子氢卡,更是在濱河造成了極大的恐慌,老刑警劉巖晨缴,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件译秦,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诀浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門棋返,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雷猪,你說我怎么就攤上這事睛竣。” “怎么了求摇?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵射沟,是天一觀的道長。 經(jīng)常有香客問我与境,道長验夯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任摔刁,我火速辦了婚禮挥转,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘共屈。我一直安慰自己绑谣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布拗引。 她就那樣靜靜地躺著借宵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矾削。 梳的紋絲不亂的頭發(fā)上壤玫,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音哼凯,去河邊找鬼欲间。 笑死,一個胖子當(dāng)著我的面吹牛断部,可吹牛的內(nèi)容都是我干的括改。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼家坎,長吁一口氣:“原來是場噩夢啊……” “哼嘱能!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虱疏,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惹骂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后做瞪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體对粪,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡右冻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了著拭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纱扭。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖儡遮,靈堂內(nèi)的尸體忽然破棺而出乳蛾,到底是詐尸還是另有隱情,我是刑警寧澤鄙币,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布肃叶,位于F島的核電站,受9級特大地震影響十嘿,放射性物質(zhì)發(fā)生泄漏因惭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一绩衷、第九天 我趴在偏房一處隱蔽的房頂上張望蹦魔。 院中可真熱鬧,春花似錦咳燕、人聲如沸勿决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至聪蘸,卻和暖如春宪肖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背健爬。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工控乾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娜遵。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓蜕衡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親设拟。 傳聞我的和親對象是個殘疾皇子慨仿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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