Android沉浸式狀態(tài)欄與EditText問題

android 4.4推出的新特性沉浸式狀態(tài)欄,windowTranslucentStatus,4.4與5.0及以上的效果有些不一樣,先上圖:

此圖為4.4系統(tǒng)的效果
此圖為5.0系統(tǒng)的效果

系統(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獲取焦點,效果是這樣的:

當(dāng)有EditText獲取焦點彈出鍵盤的時候,toolbar被拉伸,且EditText被遮擋。

設(shè)置到布局的根view,效果是這樣的:

EditText未獲取焦點,4.4顯示這樣,5.0正常
EditText獲取焦點,4.4和5.0均有此問題

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)知道該怎么做了。

第一次寫這樣的文章,若有不對之處,望各位大神指出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容