沉浸式狀態列的實現

2021-08-20 16:30:37 字數 3898 閱讀 2241

在android  4.4之前,我們的應用沒發改變手機的狀態列的顏色,當我們開啟應用的時候,在螢幕的頂部有一天黑色的狀態列,和應用的風格非常不協調,為提供更好的介面互動,google在android 4.4以後提供了設定沉浸式狀態列的方法,對於沉浸式狀態列的這個面工資存在爭議,實際的效果其實是透明的狀態列,然後再狀態列的位置顯示我們的自定義的顏色,通常為應用的actionabar的顏色。或者是將應用的整體的一張也佔據到狀態列中,類似qq一樣。

接下來我們來看看實現都需要那些配置   

1. 首先需要再values的style中加入如下** 

加入配置  如下

配置檔案寫好了 那麼我們需要開始擼**了    首先我們寫乙個封裝好工具類檔案   **如下
public class 

statusbarutils

public static

statusbarutils with

(activity activity)

public int

getcolor

() public

statusbarutils setcolor

(int

color)

public

drawable getdrawable

() public

statusbarutils setdrawable

(drawable drawable)

public boolean

isdrawerlayout

() public boolean

isactionbar

() public

statusbarutils setisactionbar

(boolean

actionbar)

/*** 是否是最外層布局為 drawerlayout 的側滑選單**

@param

drawerlayout

是否最外層布局為 drawerlayout

*@param

contentid

內容檢視的 id

*@return

*/public

statusbarutils setdrawerlayoutcontentid

(boolean

drawerlayout, int

contentid)

public void

init

() if

(mdrawable

!= null

) if

(isdrawerlayout())

if (isactionbar()) }}

/*** 去除 actionbar 陰影

*/public

statusbarutils clearactionbarshadow

() }

return this;

} /**

* 設定頁面最外層布局 fitssystemwindows 屬性**

@param

activity

*/private void

fitssystemwindows

(activity activity) }}

/*** 利用反射獲取狀態列高度**

@return

*/public static int

getstatusbarheight

(activity activity)

log.e

("getstatusbarheight"

, result + ""

);return

result;

} /**

* 獲得 actionbar 的高度**

@param

context

*@return

*/public static int

getactionbarheight

(context context)

return

result;

} /**

* 新增狀態列佔位檢視**

@param

activity

*/private void

addstatusviewwithcolor

(activity activity, int

color) else

else }}

}/**

* 新增狀態列佔位檢視**

@param

activity

*/private void

addstatusviewwithdrawble

(activity activity,

drawable drawable) else

if (isdrawerlayout()) else }}

/*** 通過設定全屏,設定狀態列透明**

@param

activity

*/private void

fullscreen

(activity activity) else }}

/*** 通過設定全屏,設定狀態列透明 導航欄黑色**

@param

activity

*/public static void

setstatustransparent

(activity activity) else }}

}

工具類寫好了  下面來看看具體如何使用  

當然我們還是需要設定在manifest檔案加一些內容 

android

:name=

".mainactivity1"

android

:theme=

"@style/noactionbartheme"

>

當設定程一張佔據狀態列的時候 我們可以這樣配置 

布局檔案很簡單

android

:layout_width=

"match_parent"

android

:layout_height=

"180dp"

android

:src=

"@mipmap/bg"

android

:scaletype=

"fitxy"

/>

這樣就實現了佔據狀態列的 樣式

接下來看改變狀態列的顏色   

這個大體上和那個差不多 只需要改變相應的方法就行

statusbarutils.with(this).setcolor(getresources().getcolor(r.color.colorprimary)).init();

這個顏色就是你想設定的顏色  

這樣基本這種都沒什麼問題了   

實現沉浸式狀態列

android從4.4的版本開始,就可以自己來定義狀態列的顏色了,下面,我們來看一下實現方式 1 沉浸式狀態列的實現方式 設定狀態列的顏色 分為兩種情況 1 當當前sdk版本在5.0及其以上版本中,直接設定狀態列顏色就可以 有對應的方法 2 當當前sdk版本在4.4到5.0之間時,則需要向設定當前狀...

沉浸式狀態列的實現

public class setstatusbartranslucent method setstatusbarcolor.invoke activity.getwindow 0x00000000 catch nosuchmethodexception e catch illegalargument...

沉浸式狀態列

1.沉浸式狀態列,向下相容到android4.4。因為5.0以後對狀態列做了新的改變,5.0及其以上可以直接在主題中設定顏色,或者呼叫window類中的setstatusbarcolor int color 來實現。2.4.4到5.0系統可以通過 windowtranslucentstatus這一特...