從Android 4.4 KitKat開始,系統(tǒng)已經(jīng)支持狀態(tài)欄設(shè)置沉浸式,設(shè)置的方式有兩種:
一種是直接在主題里設(shè)置:
<itemname="android:windowTranslucentStatus">true</item>?
另外一種是在代碼里設(shè)置:window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
5.0以后增加了設(shè)置狀態(tài)欄的顏色
<item name="android:statusBarColor">@android:color/transparent</item>
有時(shí)候我們需要顯示圖片,這時(shí)候需要把狀態(tài)欄設(shè)置為透明,當(dāng)我們?cè)O(shè)置了透明以后,會(huì)發(fā)現(xiàn)狀態(tài)欄顏色并沒(méi)有顯示透明,我們需要對(duì)他進(jìn)行適配
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
int visiblity = window.getDecorView().getSystemUiVisibility();
//布局內(nèi)容全屏展示
visiblity |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
//防止內(nèi)容區(qū)域發(fā)生大小變化
visiblity |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
window.getDecorView().setSystemUiVisibility(visiblity);
這樣就可以顯示沉浸式了,當(dāng)然,如果我們的布局里面有toolbar的時(shí)候,會(huì)出現(xiàn)高度的問(wèn)題,我們需要對(duì)toolbar進(jìn)行布局上的調(diào)整。
首先,我們需要獲取到狀態(tài)欄的高度
public int getStatusBarHeight(Context context){
? ? ? int resId = context.getResources().getIdentifier("status_bar_height",
? ? ? ? "dimen","android");
? ? ? if (resId >0){
? ? ? return context.getResources().getDimensionPixelSize(resId);
? ? }
return 0;
}
然后,給我們的toolbar設(shè)置margin以及padding值
public void setHeightAndPadding(Context context,View view){
? ? ? ?ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
? ? ? ?layoutParams.height += getStatusBarHeight(context);
? ? ? ?view.setPadding(view.getPaddingLeft(),
? ? ? ? ? ? ? ?view.getPaddingTop()+getStatusBarHeight(context),
? ? ? ? ? ? ? ?view.getPaddingRight(),view.getPaddingBottom());
}
這樣我們就完美的解決沉浸式的適配問(wèn)題了。