Android4.4、Android5.0+状态栏颜色、透明等设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sjzx3142/article/details/52230490


Android 4.4


Manifest文件Activity的Theme设置:

<style name="theme_main" parent="android:Theme">

        <!-- 隐藏系统标题栏 -->
        <item name="android:windowNoTitle">true</item>

        <!-- 透明标题栏 -->
        <item name="android:windowTranslucentStatus">true</item>

    </style>

代码中设置:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }

以上设置都是让状态栏透明,让页面布局从状态栏开始,如果想改变状态栏颜色需要在页面布局的最外层加入

android:fitsSystemWindows="true"

或者是在代码里加入

<span style="font-size:14px;">if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //set child View not fill the system window
            ViewGroup mContentView = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);
            View mChildView = mContentView.getChildAt(0);
            if (mChildView != null) {
                ViewCompat.setFitsSystemWindows(mChildView, true);
            }
        }</span>

注:必须是在setContentView()以后执行

状态栏的颜色以最外层布局的背景色为准。




Android 5.0+


1.在Manifest文件中配置Activity的theme,设置状态栏颜色,主题颜色等。



<style name="AppBaseTheme" parent="android:ThemeOverlay.Material.Dark.ActionBar">
        <!-- 隐藏系统标题栏 -->
        <item name="android:windowNoTitle">true</item>

        <!-- Main theme colors -->
        <!-- App主题颜色(滑动阴影等)   your app's branding color (for the app bar)-->
        <item name="android:colorPrimary">#FF6600</item>

        <!-- 状态栏颜色   darker variant of colorPrimary (for status bar, contextual app bars) -->
        <item name="android:colorPrimaryDark">#e86053</item>

        <!-- 控件主题样式(例如EditText,CheckBox,RadioButton等)  theme UI controls like checkboxes and text fields -->
        <item name="android:colorAccent">#BFDF0F</item>


        <!-- 系统默认控件样式 -->
        <!-- 点击时颜色 -->
        <!--<item name="android:colorControlHighlight">#0000FF</item>-->
        <!-- 正常状态下颜色 -->
        <!--<item name="android:colorControlNormal">#FF0000</item>-->
        <!-- 选中时颜色 -->
        <!--<item name="android:colorControlActivated">#00FF00</item>-->

    </style>

2.在代码中设置状态栏颜色

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            //After LOLLIPOP not translucent status bar
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //Then call setStatusBarColor.
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.BLUE);
        }

3.设置状态栏透明(目前只找到在代码中设置)

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            );
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        }

  FLAG_TRANSLUCENT_STATUS //透明状态栏
  FLAG_TRANSLUCENT_NAVIGATION //透明导航栏

* setSystemUiVisibility这个方法参数表示的状态比较多,具体如下:

    1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。

    2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。

    3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。

    4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。

    5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。

    8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。


* window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

  Flag表明这个窗口负责绘制系统状态栏标题栏的背景。如果设置,系统bar绘制成透明背景,在这个窗口相应的地方会填充{@link Window#getStatusBarColor()}和       {@link Window#getNavigationBarColor()}对应的颜色。



虚拟按键相关设置

api >= 19
<span style="font-size:12px;"><item name="android:windowTranslucentNavigation">true</item></span>
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
虚拟按键底部有阴影


api >= 21
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                window.getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                );
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setNavigationBarColor(Color.TRANSPARENT);
//                window.setNavigationBarColor(Color.BLUE);
            }
        }
可以改变虚拟按键的背景色,没有阴影(貌似在theme配置文件里好像改不了颜色)



更改状态栏字体颜色为深色(Android6.0 +)

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            }




展开阅读全文

没有更多推荐了,返回首页