fitSystemWindow屬性對(duì)于狀態(tài)欄的作用

一,首先我們來(lái)看一下QQ對(duì)于狀態(tài)欄適配的效果圖

版本對(duì)比圖

從左到右手機(jī)系統(tǒng)版本依次是4.3、5.1、6.0.1的顯示效果,我們后面講解狀態(tài)欄都根據(jù)這個(gè)適配進(jìn)行講解。

二,fitSystemWindow屬性

官方描述:?

Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.?

簡(jiǎn)單描述:?

這個(gè)一個(gè)boolean值的內(nèi)部屬性,讓view可以根據(jù)系統(tǒng)窗口(如status bar)來(lái)調(diào)整自己的布局,如果值為true,就會(huì)調(diào)整view的paingding屬性來(lái)給system windows留出空間,而這個(gè)padding值會(huì)跟手機(jī)狀態(tài)欄的高度一致,這樣就避免了不同手機(jī)狀態(tài)欄高度不一樣,手動(dòng)獲取的麻煩。如果值為false,就不會(huì)調(diào)整view的屬性來(lái)給system window留出空間,也就說(shuō)這個(gè)時(shí)候的狀態(tài)欄會(huì)擋住我們的view。

實(shí)際效果:?

當(dāng)status bar為透明或半透明時(shí)(4.4以上),系統(tǒng)會(huì)設(shè)置view的paddingTop值為一個(gè)適合的值(status bar的高度)讓view的內(nèi)容不被上拉到狀態(tài)欄(被狀態(tài)欄擋住),當(dāng)在不占據(jù)status bar的情況下(4.4以下)會(huì)設(shè)置paddingTop值為0(因?yàn)闆]有占據(jù)status bar所以不用留出空間),這個(gè)時(shí)候的狀態(tài)欄是系統(tǒng)默認(rèn)黑色背景的狀態(tài)欄。

三,主題theme

在實(shí)際操作之前我們需要設(shè)置我們的默認(rèn)主題:

使用Theme.AppCompat.Light.NoActionBar(toolbar的兼容主題):既可以適配使用toolbar(由于google已經(jīng)不再建議使用action bar了,而是推薦使用toolbar,且toolbar的使用更加的靈活,所以toolbar和actionbar的選擇也沒什么好糾結(jié)的)和不使用toolbar的情況(即自定義topBar布局)。

設(shè)置狀態(tài)為透明色,通過(guò)如下代碼

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//版本4.4

????????????Window window = getWindow();

? ? ? ? ? ? // Translucent status bar

? ? ? ? ? ? window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,

? ? ? ? ? ? ?WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

? }

通過(guò)此代碼設(shè)置狀態(tài)欄透明,在配合fitSystemWindow。我們會(huì)發(fā)現(xiàn)如最開始的三張圖一樣:

5.0以下版本顯示系統(tǒng)默認(rèn)黑色狀態(tài)欄

5.0-6.0狀態(tài)欄為半透明狀態(tài)

6.0以上為透明狀態(tài)。

四,實(shí)戰(zhàn)效果

頁(yè)面activity 繼承 appcompatActivity 設(shè)置上面的主題 引入appcompat-v7的兼容包 版本在23以上

設(shè)置狀態(tài)欄透明


設(shè)置狀態(tài)欄代碼

下面是布局文件。最外面是一個(gè)線性布局,textView是一個(gè)標(biāo)題欄。下面是兩個(gè)跳轉(zhuǎn)按鈕

布局文件

fitSystemWindow=true效果,我們發(fā)現(xiàn)"標(biāo)題欄"三個(gè)字是center狀態(tài) 但是卻沒有居中下移了。是因?yàn)閠rue狀態(tài)以后,給默認(rèn)增加了padding,給系統(tǒng)status bar預(yù)留了位置

true效果圖

fitSystemWindow=false效果,我們發(fā)現(xiàn)標(biāo)題欄被遮擋了,因?yàn)閷傩詾閒alse,沒有給系統(tǒng)狀態(tài)欄預(yù)留位置,所以導(dǎo)致的。


false效果圖

fitSystemWindow一般作用于。setContentView中View的第一個(gè)View??梢允且粋€(gè)不同的View,也可以是ViewGroup,當(dāng)然ToolBar也是可以的。

下一篇文章我們會(huì)詳細(xì)介紹,標(biāo)題一中,狀態(tài)欄的實(shí)現(xiàn)。

參考文章 :http://blog.csdn.net/ys408973279/article/details/49994407



個(gè)人公眾號(hào)“Code之旅”

歡迎掃碼關(guān)注個(gè)人公眾號(hào)“Code之旅”

個(gè)人gitHub地址:wangxp423 (wangxp) · GitHub

個(gè)人博客地址:http://blog.csdn.net/wangxp423

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 原文:http://blog.csdn.net/mybeta/article/details/5076032...
    naturs閱讀 23,285評(píng)論 8 70
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評(píng)論 25 709
  • 在日常開發(fā)中,我們經(jīng)常會(huì)遇到viewpager配合fragment的情況;這些fragment有的要求頂進(jìn)狀態(tài)欄,...
    我想做個(gè)程序猿閱讀 6,328評(píng)論 0 1
  • 一個(gè)人的三觀如何,一般來(lái)說(shuō),一半來(lái)自他汲取的知識(shí)與接觸的社會(huì),另一半來(lái)自家庭與朋友。然而更多時(shí)候,后者更...
    立秋后的天閱讀 221評(píng)論 0 0
  • 1. “如果有來(lái)世,我想做一只貓。”狗毛毛站在鏡子前說(shuō)。 “為什么?”貓曲曲伸了個(gè)懶腰,趴在沙發(fā)上。 “做一只貓,...
    油煙未歌閱讀 631評(píng)論 1 1

友情鏈接更多精彩內(nèi)容