今天我们不谈周立波吸毒,不谈陈思成出轨,我们来谈谈android的变色状态栏,其实就是所谓的沉浸式状态栏或者透明状态栏(但我觉得变色状态栏这个说法更准确).
先来个具体使用场景,比如首页一个MainActivity,然后里面有四个Fragment,每个Fragment里的状态栏都不同
首先在android4.4以上才能做变色状态栏,在BaseActivity里的onCreate方法里直接加入这段代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0
WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
}
加入代码后,此时四个Fragment的标题布局会直接延伸到状态栏,状态栏就相当于着色了,但是有一个问题,就是我们的顶部布局会叠加在状态栏上,这是我们所不希望的,所以可以在标题布局父布局处加一个android:paddingTop="25dp"属性,因为状态栏的高度就是25dp,所以会将状态栏顶上去而不会叠加到上面,代码如下
//标题父布局
<LinearLayout
android:id="@+id/llTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#d9a336"
android:paddingTop="@dimen/statusBarHeight">
//标题
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="44dp"
android:gravity="center"
android:text="理财产品"
android:textColor="@color/white"
android:textSize="17sp" />
</LinearLayout>
完美解决状态栏变色的问题。