【问题标题】:Android: How to set status bar and navigation bar semi transparentAndroid:如何设置状态栏和导航栏半透明
【发布时间】:2017-01-13 13:11:59
【问题描述】:

在某些应用程序中,我注意到状态栏和导航栏是透明的,但并非完全透明。我不知道这是背景颜色还是其他。有人会告诉我如何实现这个吗?谢谢你。

【问题讨论】:

    标签: android android-layout android-xml android-statusbar android-navigation-bar


    【解决方案1】:

    你可以使用这两种方法:

    getWindow().setStatusBarColor(Color.parseColor("#20111111"));
    getWindow().setNavigationBarColor(Color.parseColor("#20111111"));
    

    【讨论】:

    • 谢谢,您知道 Google 使用的确切颜色吗?
    • 我不知道确切的颜色,但 Color.parseColor("#20111111") 这会帮助你。
    • 谢谢,这很接近了。
    • 快乐编码 :)
    • 我的颜色变得不透明
    【解决方案2】:

    除了设置导航栏颜色和状态栏颜色之外,还有更多内容,您实际上必须让您的内容出现在两者下方。

    我在我的utils类中使用下面的方法设置在setContentView之前的activity中

    public static void setWindowStatusNav(android.view.Window window, int statusbarColor, int navbarColor) {
    
        int flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
    
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT_WATCH) {
            window.getAttributes().flags |= flags;
        }
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            int uiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
            window.getDecorView().setSystemUiVisibility(uiVisibility);
        }
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.getAttributes().flags &= ~flags;
    
            window.setStatusBarColor(statusbarColor);
            window.setNavigationBarColor(navbarColor);
        }
    }
    

    在你的活动中使用它:

    public class MyActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
            int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
            MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
    
            setContentView(R.layout.my_activity);
        }
    }
    

    要隐藏导航栏和状态栏,请调用此方法:

    public static void setWindowStatusNavHidden(android.view.Window window) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            int uiVisibility = window.getDecorView().getSystemUiVisibility();
            uiVisibility |= View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    
            window.getDecorView().setSystemUiVisibility(uiVisibility);
        }
    }
    

    使用完毕:

    public class MyActivity extends AppCompatActivity {
    
        static boolean statusNavVisible = true;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
            int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
            MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
    
            setContentView(R.layout.my_activity);
    
            Button btnShowHide = findViewById(R.id.my_button);
            btnShowHide.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (statusNavVisible) {
                        statusNavVisible = false;
                        MyUtils.setWindowStatusNavHidden(getWindow());
                    } else {
                        statusNavVisible = true;
                        MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
                    }
                }
            });
        }
    }
    

    【讨论】: