這四篇挺好###
由沉浸式狀態(tài)欄引發(fā)的血案
Android開發(fā):Translucent System Bar 的最佳實(shí)踐
Android 系統(tǒng)狀態(tài)欄沉浸式/透明化完整解決方案
薄荷Toolbar(ActionBar)的適配方案
這個(gè)小伙很不錯(cuò)###
我寫了個(gè)小demo,為了方便以后自己復(fù)用的,地址戳戳看
- 方法一(代碼實(shí)現(xiàn)): 以下這段代碼的作用是:在4.4以上狀態(tài)欄透明、允許AppBarLayout布局?jǐn)U展至狀態(tài)欄
/**
* 配置狀態(tài)欄
*/
private void setTransparentBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
- 方法二(xml中配置): 在values-v19下styles.xml文件中添加如下代碼——AppBarLayout的內(nèi)容布局就可以擴(kuò)展至系統(tǒng)狀態(tài)欄,狀態(tài)欄會(huì)覆蓋在toolbar上
<resources>
<style name="AppTheme" parent="@style/AppBaseTheme">
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>
方法二會(huì)這樣↓↓↓↓↓↓,so……還是用方法一吧,其實(shí)我是全都寫上的,即代碼實(shí)現(xiàn)+xml配置###
AppBarLayout背景顏色設(shè)置,后面布局中修改Background會(huì)覆蓋主題中的colorPrimary###
給Toolbar設(shè)置android:layout_marginTop###
在values, values-v19兩個(gè)文件夾下分別聲明toolbar_margin_top變量,values文件夾下值為0dp,而values-v19文件夾下值為25dp.
效果圖###
再啰嗦一句###
在這個(gè)方法中,經(jīng)測試發(fā)現(xiàn)fitSystemWindow=“true”不起作用
第二天……###
第二天,我覺得昨天的還是有瑕疵,我記得我上次弄透明狀態(tài)欄fitSystemWindow=“true”就起作用了啊,經(jīng)過一番,最后算是弄明白了,原因是我代碼實(shí)現(xiàn)的多了這么一句
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
/** Window flag: allow window to extend outside of the screen. */
public static final int FLAG_LAYOUT_NO_LIMITS = 0x00000200;
然后我去掉了上面這一句,布局中也去掉了Toolbar的
android:layout_marginTop="@dimen/toolbar_margin_top",
并且給AppBarLayout加上fitSystemWindow=“true”,但是4.4好用,5.1就不行了,真是眾口難調(diào)啊,所以還是按照之前的方法來,畢竟我們不需要知道茴香豆的“茴”字有幾種寫法,只需要掌握一種確實(shí)好用的。
總結(jié)###
兩步走:
1、上述代碼實(shí)現(xiàn)的方法,一般寫在BaseActivity中
2、在各自的布局中,需要浸入狀態(tài)欄的view——肯定是位于整個(gè)布局最上端了(這就是句廢話了)——設(shè)置內(nèi)邊距或者外邊距了。
補(bǔ)充
本篇文章總結(jié)的方法僅在小米手機(jī)和模擬器上測試過,之后在錘子手機(jī)上測試發(fā)現(xiàn)錘子手機(jī)狀態(tài)欄僅能實(shí)現(xiàn)半透明。