状态栏透明设置

2017-07-06  本文已影响91人  真胖大海

参考文档1
参考文档2
参考文档3

状态栏透明设置

一.android4.4(19) 及其以上

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
    localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
}
<item name="android:windowTranslucentStatus">true</item>

如上设置状态会被设置成透明的,但是页面内容会扩展到状态栏

解决方法

二.android5.0(21) 及其以上

Window window = getWindow();
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(getResources().getColor(R.color.header_bg));
<style name="AppTheme" parent="BaseTheme">
        <item name="android:colorPrimary">@color/colorPrimary</item>
        <item name="android:colorPrimaryDark">@color/colorPrimary</item>
        <item name="android:colorAccent">@color/colorAccent</item>
        <item name="android:statusBarColor">@color/white</item>
</style>
    ```
如果设置了statusBarColor 状态栏颜色为其设置的值  
如果没有设置statusBarColor 状态栏颜色为colorPrimaryDark设置的值


# 状态栏图标文字颜色设置
## android 6.0(23)及其以上
+ 代码设置

Window window = getWindow();
View decor = window.getDecorView();
int ui = decor.getSystemUiVisibility();
ui |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
// ui &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
decor.setSystemUiVisibility(ui);

ui |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;  //状态栏为高亮 
ui &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //状态栏不为高亮
+ 主题属性设置  
  <item name="android:windowLightStatusBar">true</item>
  设置为true,表示状态栏为高亮的颜色,则状态栏图标文字为黑色
  设置为false,表示状态栏为不为高亮的颜色,则状态栏图标文字为白色
上一篇下一篇

猜你喜欢

热点阅读