* 沉浸式狀態欄
輪子: ImmersionBar
博客:android4.4以上沉浸式狀態欄和導航欄實現以及Bar的其他管理
這個輪子呢,不僅處理好了狀態欄以及可能會有的導航欄的顏色問題,還可以設置純色和漸變色,并且在沉浸式會引起的鍵盤沖突也有很好的處理。關于具體的使用說明請查看git和博主博文,這里以我使用的為例做一個簡單的舉例。
我項目中通常遇到的情況就是:
1、Activity全屏:①全屏中只有圖片或者內容距離狀態欄比較大;②全屏但是在頂部也存在一些控件(這樣就會導致控件被狀態欄中的電池時間等信息給遮擋)
2、同一個Activity中Fragment的狀態欄需要不同
3、涉及到漸變色和純色的問題
這里面附帶的問題就是沉浸式狀態欄會帶來的鍵盤沖突的問題。。
以下在Activity的基類中的setContentView方法之后設置的代碼:
if(HEIGHT_IS_LIGHTBG_DARKFONT==status){//狀態欄高度存在,背景淺色,狀態欄字體需要深色狀態欄改為黑色如果不支持加上透明狀態欄保證狀態欄字體可以看到(在不支持更改顏色的手機上將狀態欄加上透明度0.2f)
ImmersionBar.with(this).statusBarColor(R.color.white).statusBarDarkFont(true,0.2f).fitsSystemWindows(true).init();
}else if(HEIGHT_IS_DARKBG_WHITEFONT==status){//狀態欄高度存在,背景深色,字體默認淺色
ImmersionBar.with(this).statusBarColor(R.color.login_register).fitsSystemWindows(true).keyboardEnable(true).init();
}else if(HEIGHT_NONE_LIGHTBG_DARKFONT==status){//狀態欄高度不存在,背景淺色,字體深色
ImmersionBar.with(this).statusBarDarkFont(true,0.2f).keyboardEnable(true).init();
}else if(HEIGHT_NONE_DARKBG_LIGHTFONT==status){//狀態欄高度不存在,背景深色,字體淺色
ImmersionBar.with(this).keyboardEnable(true).init();
}else if(HEIGHT_VIEW_LIGHT==status){//狀態欄和標題欄一樣保持漸變色,這里用了view
statusView = easyFind(R.id.status_view);//在布局文件中需要添加一個view
StatusBarUtil.setStatusView(statusView,true);//將本機狀態欄高度測量出來設置給上面的view
ImmersionBar.with(this).statusBarView(statusView).init();//將view設置到狀態欄
}
最后一項采用標題欄漸變色的時候需要在相應的布局文件中添加一個view
<View
android:id="@+id/status_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@drawable/statusbar_green_gradient"/>
到此為止,基本上就可以處理一般的問題。但是問題1中的②和問題2還沒有解決,在上面的基礎上繼續:
問題1中的②:全屏但是頂部存在一些控件(比如布局頭部是一個圖片為背景的布局,頂部有返回按鈕和更多按鈕),處理方法可以是給這個頂部的控件布局動態添加一個本機狀態欄高度的marginTop。
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(0,StatusBarUtil.intStatusView(),0,0);//設置的marginTop是計算得出的本機的狀態欄高度
rlay_title.setLayoutParams(lp);
最后也就是問題2:在fragment切換時的狀態欄顏色的改變了。這里,Activity設置全屏的基礎上,將標題欄寫在fragment的布局中了,同樣在fragment布局中根據需要在頭部添加一個view,然后在代碼中設置view的高度為狀態欄高度并設置背景色。
<View
android:id="@+id/top_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
top_view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, StatusBarUtil.intStatusView()));
top_view.setBackgroundColor(ContextCompat.getColor(getActivity(),R.color.sys_red));
statusBarColor不加的這種可能會引起鍵盤頂起底部布局的問題。
【END】本文就說到這里。
沉浸式狀態欄的博文:
Android關于沉浸式狀態欄的一些總結