1. 程式人生 > >fitSystemWindow屬性對於狀態列的作用

fitSystemWindow屬性對於狀態列的作用

一,首先我們來看一下QQ對於狀態列適配的效果圖

這裡寫圖片描述
從左到右手機系統版本依次是4.3、5.1、6.0.1的顯示效果,我們後面講解狀態列都根據這個適配進行講解。

二,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.

簡單描述:

這個一個boolean值的內部屬性,讓view可以根據系統視窗(如status bar)來調整自己的佈局,如果值為true,就會調整view的paingding屬性來給system windows留出空間,而這個padding值會跟手機狀態列的高度一致,這樣就避免了不同手機狀態列高度不一樣,手動獲取的麻煩。如果值為false,就不會調整view的屬性來給system window留出空間,也就說這個時候的狀態列會擋住我們的view。

實際效果:

當status bar為透明或半透明時(4.4以上),系統會設定view的paddingTop值為一個適合的值(status bar的高度)讓view的內容不被上拉到狀態列(被狀態列擋住),當在不佔據status bar的情況下(4.4以下)會設定paddingTop值為0(因為沒有佔據status bar所以不用留出空間),這個時候的狀態列是系統預設黑色背景的狀態列。

三,主題theme

在實際操作之前我們需要設定我們的預設主題:

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

設定狀態為透明色,通過如下程式碼

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); //修改5.0以上狀態列半透明 貌似並沒有什麼卵用(機型錘子T2 5.0系統)(可能跟廠商定製有關) //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); }

通過此程式碼設定狀態列透明,在配合fitSystemWindow。我們會發現如最開始的三張圖一樣:
5.0以下版本顯示系統預設黑色狀態列
5.0-6.0狀態列為半透明狀態
6.0以上為透明狀態。

四,實戰效果

頁面activity 繼承 appcompatActivity 設定上面的主題 引入appcompat-v7的相容包 版本在23以上

設定狀態列透明
這裡寫圖片描述
下面是佈局檔案。最外面是一個線性佈局,textView是一個標題欄。下面是兩個跳轉按鈕
這裡寫圖片描述
fitSystemWindow=true效果(下圖),我們發現”標題欄”三個字是center狀態 但是卻沒有居中下移了。是因為true狀態以後,給預設增加了padding,給系統status bar預留了位置
這裡寫圖片描述
fitSystemWindow=false效果(下圖),我們發現標題欄被遮擋了,因為屬性為false,沒有給系統狀態列預留位置,所以導致的。
這裡寫圖片描述
fitSystemWindow一般作用於。setContentView中View的第一個View。可以是一個不同的View,也可以是ViewGroup,當然ToolBar也是可以的。

下一篇文章我們會詳細介紹,標題一中,狀態列的實現。

個人公眾號“Code之旅”
這裡寫圖片描述
歡迎掃碼關注個人公眾號“Code之旅”

相關推薦

fitSystemWindow屬性對於狀態作用

一,首先我們來看一下QQ對於狀態列適配的效果圖 從左到右手機系統版本依次是4.3、5.1、6.0.1的顯示效果,我們後面講解狀態列都根據這個適配進行講解。 二,fitSystemWindow屬性 官方描述: Boolean internal a

(七十)Xcode5及以上對於狀態和導航欄樣式的設定方法

【狀態列】 在Xcode5以前,狀態列是通過UIApplication單例來管理的,而在此後,預設情況下狀態列通過控制器來管理,而且如果控制器有NavigationController,那麼設定狀態列的操作在NavigationController中進行,呼叫的方法為: -

Android 設定狀態後adjustResize屬性無效

這兩天被這個問題搞得很焦灼,今天終於解決了,在這裡把自己解決的辦法分享一下; 這是之前碰到的問題 如截圖所示,輸入框被遮住了 之前試過AndroidBug5497Workaround這個類,但發現在有些手機上無法做到適配,於是又到處找,最後終於找到了一種方法。 首先在對

Mybatis中實體類屬性和數據之間映射的四種辦法

ase -a factor tag prop 方式 駝峰命名 tty 映射文件 http://blog.csdn.net/lmy86263/article/details/53150091 Mybatis不像hibernate中那麽自動化,通過@Column註解或者直

Js中常用知識點(typeof、動態屬性、變量作用域)

常用知識 sage 打印 bject 理解 各類 swa clas java 1、Js中各類型的常量表示形式:Number:number String:string Object:objec 2、typeof運算符在Js中的使用:用於判斷某一對象是何種類型,返

數位dp對於狀態描述與發現的一些感悟

code scanf ble 數字 統計 .cn detail 今天 size 今天刷的數位dp 第一題看了題解以後知道了數位dp的基本板子,寫數位dp的方式(運用記憶化遞歸的方法)已經基本固定。 那麽接下來的難點主要還是對於題目描述的問題,如何抽象成dp中的狀態。就今天刷

【取什麼主題好呢】沉浸式狀態----統一Title欄高度

新手上路 直接po程式碼(複製的時候記得加上setBar) 先是網上很好找到的“通過設定全屏,設定狀態列透明” /** * 通過設定全屏,設定狀態列透明 * @param activity */ public static void

iOS狀態(UIStatusBar)的設定

  UIStatusBar就是應用最上方顯示電池和時間資訊的狀態列,寬度與螢幕寬度相等,高度為20.對它的顯示控制分兩種情況,一種是程式啟動時,另一種是程式執行的時候。 1.程式啟動時。 在Info.plist 中將Status bar is initiall

vue專案 使用Hbuilder打包app 設定沉浸式狀態

使用 Hbuilder新建好移動app專案後,mainfest.json這個檔案裡的 plus裡設定 statusbar ..... "plus": { "statusbar": { "immersed": true },

oracle 資料庫對於求最大值

1.案例:   SELECT GREATEST('36', '55', '34') V_MAX, LEAST('36', '55', '34') V_MIN FROM DUAL Oracle比較一列的最大值或者最小值,我們會不假思索地用MAX和MIN函式,但是對於比較一行的最大值

Android狀態和導航欄

1.隱藏狀態列或導航欄 View decordView = getWindow().getDecorView(); /*SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN 分別代表隱藏導航欄和狀態列

manjaro狀態顯示實時網速cpu記憶體等資訊

開源專案indicator-sysmonitor地址:https://github.com/fossfreedom/indicator-sysmonitor 1,開啟manjaro自帶的軟體商店:        搜尋

android 沉浸式狀態(像ios那樣的狀態與應用統一顏色樣式)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android 修改狀態狀態列為view的圖片的一部分)①

Android 修改狀態列,讓狀態列和佈局中view的第一個圖片重合 效果圖如下: 這個效果完全可以用style來達到效果 下面是根據stysle來改動 在res下新建一個values-v19 新建styles.xml <?xml version="1.

Cordova 小米8留海螢幕適配之沉狀態與 適配大螢幕手機 從開始到結束 總結

 之前專案中打包的apk安裝到全面屏手機後,發現在應用下方出現了一大塊黑色區域(如:小米8),只有在系統中設定適配全面屏才能讓應用在全面屏手機中顯示正常,但是這種方式並不友好,而且有些手機廠商可能也沒有這種設定,所以還是需要我們再打包的時候就做一些相應的處理。 &l

Cordova 實現沉浸式(透明)狀態效果

沉浸式狀態列(Immersive Mode)和透明狀態列(Translucent Bar)。 這兩個概念很多地方的解釋都不是很清晰,所以導致很多人都各有各的認識。所以這裡我也有一個自己的認識,筆者認為沉浸式狀態列也可以說是全屏模式,即隱藏狀態列與導航欄。 而透明狀態列是不隱藏狀態列但是它所呈

狀態的各種配置引數

1. View.SYSTEM_UI_FLAG_VISIBLE: 顯示狀態列,Activity不全屏顯示(恢復到有狀態的正常情況)。 2. View.INVISIBLE: 隱藏狀態列,同時Activity會伸展全屏顯示。 3. View.SYSTEM_UI_FLAG_FUL

VB6.0關於狀態的使用

開啟vb6.0選擇工程——部件——Microsoft windows commom controls 6.0 位 置:Microsoft Windows Common Controls 6.0 用 途:StatusBar控制元件提供了一個窗體,該窗體通常位於父窗體的底部,通過這一窗體,應用程

android4.4以上沉浸式狀態和導航欄實現以及Bar的其他管理

自從android4.4開始,android手機狀態列再也不是一成黑的時代,之前叫做變色龍,miui6釋出會把他叫做沉浸式,之後大家就自然而然的接受了沉浸式這個名稱,其實實際應該叫做Translucent Bar,即為透明狀態列。   沉浸式實現原理其實是使整個activity佈局延伸到整個螢幕,然

ios 狀態statusBar的背景顏色

ios 狀態列statusBar的背景顏色 一、無導航條的情況: 系統預設狀態列的字型顏色為黑色,即UIStatusBarStyle=UIStatusBarStyleDefault,同時背景顏色和self.view.backgroundColor顏色一致,如下圖所示: