android 4.4推出的新特性沉浸式狀態(tài)欄,windowTranslucentStatus,4.4與5.0及以上的效果有些不一樣,先上圖:
系統(tǒng)21>api>=19和系統(tǒng)api>=21的狀態(tài)欄會有些差異,后者是狀態(tài)欄顏色深一點。而4.4以下沒有這樣的效果,不支持沉浸式。
? ? ? 要實現(xiàn)這樣的效果,在values-19中:
? ? ? values-21中:
? ? ? 現(xiàn)在在4.4的系統(tǒng)運行起來的效果如下圖,并不是我們想要的。而在5.0及以上的系統(tǒng)運行,效果和上面貼的圖一樣。
狀態(tài)欄和toolbar重疊再了一起,在4.4狀態(tài)欄的位置不會預(yù)留出來,頁面完全沉浸到了狀態(tài)欄。這時候需要在布局中加入android:fitsSystemWindows="true"。
設(shè)置在toolbar且EditText獲取焦點,效果是這樣的:
設(shè)置到布局的根view,效果是這樣的:
EditText和沉浸式狀態(tài)欄的問題,不知道是bug還是什么。但是我們依然有解決的辦法。既要解決沉浸式,又要解決鍵盤彈出引起的問題。
首先解決4.4沉浸式問題,系統(tǒng)4.4以上可以獲取到狀態(tài)欄及其高度,通過new一個view加到狀態(tài)欄,給view設(shè)置背景色來達(dá)到效果,同時也可以達(dá)到5.0的效果,關(guān)鍵代碼如下:
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
View statusBarView =newView(activity);
ViewGroup.LayoutParams lp =newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));//獲取狀態(tài)欄高度
statusBarView.setBackgroundColor(color);
contentView.addView(statusBarView, lp);
//獲取狀態(tài)欄高度的方法
public static intgetStatusBarHeight(Context context) {
in tresult =0;
int resourceId = context.getResources().getIdentifier("status_bar_height","dimen","android");
if(resourceId >0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
其次,解決toolbar和狀態(tài)欄也被頂上去的問題,在AndroidManifest里面設(shè)置android:windowSoftInputMode="adjustResize",這樣還是沒有效果,在網(wǎng)上查資料,很多人都說重寫跟布局的fitSysytemWindows方法,然后再在根布局設(shè)置android:fitsSystemWindows="true"就可以解決,但是我經(jīng)過測試的結(jié)果,還是會有這樣的問題。最后把toolbar以下的view用scrollview包裹起來,解決了toolbar和狀態(tài)欄被頂出屏幕的問題。
? ? ?最終的效果就是文章開頭貼的兩張圖的效果。4.4和5.0的區(qū)別是,4.4用了上面的方法著跟toolbar一樣的顏色,而5.0沒有著色。如果想要統(tǒng)一5.0效果,或者統(tǒng)一4.4的效果,想必大家已經(jīng)知道該怎么做了。
第一次寫這樣的文章,若有不對之處,望各位大神指出。