Android 透明状态栏,沉浸式状态栏

package cn.com.demo.demoacivity ;

import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;


public class DemoAcivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getSupportActionBar() != null)
            getSupportActionBar().hide();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus)
            setGeneralView(this);
    }

    /**
     *  SYSTEM_UI_FLAG_VISIBLE :状态栏和Activity共存,Activity不全屏显示。   
     *  也就是应用平常的显示画面
     *
     *  SYSTEM_UI_FLAG_LOW_PROFILE:设置状态栏和导航栏中的图标变小,变模糊或者弱化其效果
     *
     *  SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION: 将布局内容拓展到导航栏的后面
     *
     *  SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏导航栏,
     *  点击屏幕任意区域,导航栏将重新出现,并且不会自动消失
     *
     * View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN: 将布局内容拓展到状态栏的后面
     *
     *  SYSTEM_UI_FLAG_FULLSCREEN:隐藏状态栏,需要从状态栏位置下拉才会出现。
     *
     *  View.SYSTEM_UI_FLAG_LAYOUT_STABLE:稳定布局,
     *  主要是在全屏和非全屏切换时,布局不要有大的变化。
     *  一般和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、
     *  View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION搭配使用。
     *  同时,android:fitsSystemWindows要设置为true(默认设置即是true)。
     *
     *  View.SYSTEM_UI_FLAG_IMMERSIVE:使状态栏和导航栏真正的进入沉浸模式,即全屏模式,
     *  如果没有设置这个标志,设置全屏时,我们点击屏幕的任意位置,
     *  就会恢复为正常模式。所以,View.SYSTEM_UI_FLAG_IMMERSIVE都是
     *  配合View.SYSTEM_UI_FLAG_FULLSCREEN
     *  和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION一起使用的。
     *
     *  View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:它的效果跟View.SYSTEM_UI_FLAG_IMMERSIVE一样。
     *  但是,它在全屏模式下,用户上下拉状态栏或者导航栏时,
     *  这些系统栏只是以半透明的状态显示出来,并且在一定时间后会自动消失。
     */

    /**
     * 设置透明状态栏,导航栏效果
     */
    public static boolean setTransparentView(Activity activity) {
        if (Build.VERSION.SDK_INT < 21)
            return false;
        activity.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
        activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
        return true;
    }

    /**
     * 设置为沉浸模式
     */
    public static boolean setImmersiveView(Activity activity) {
        if (Build.VERSION.SDK_INT < 19)
            return false;
        activity.getWindow().getDecorView().setSystemUiVisibility(
                //activity layout 入侵状态栏,导航栏
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        //隐藏状态栏,导航栏功能
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        return true;
    }

    /**
     * 沉浸模式但状态栏透明显示
     */
    public static boolean setGeneralView(Activity activity) {
        if (Build.VERSION.SDK_INT < 21)
            return false;
        activity.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
        return true;
    }

}

猜你喜欢

转载自blog.csdn.net/baidu_41743921/article/details/81158922