zoukankan      html  css  js  c++  java
  • 68.Android之透明状态栏

    转载:http://www.jianshu.com/p/2f17d0e7f6b0

    Android开发中需要透明状态栏,注意:本文只适配Android4.4以上及5.0以上设备

    概述

    有时候我们想在 andorid 手机上实现一种 跨越 顶部状态栏的效果,比如一张图片直接显示在 状态栏内。比如下图:


     


    这个页面里有张图片,这个图片显示在整个页面的上部分。状态栏是 漂浮在这个图片上的。

    实现透明状态栏的方法

    适配Android 4.4 +的方法:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                Window window = activity.getWindow();
                // Translucent status bar
                window.setFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                // Translucent navigation bar
                window.setFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            }

    适配 Android 5.0+ 的方法:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = activity.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_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
                window.setNavigationBarColor(Color.TRANSPARENT);
            }

    如何使用

    在 activity的onCreate 方法中的 setContentView 方法之前调用它。比如:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            getWindow().requestFeature(Window.FEATURE_NO_TITLE);
         //在这里调用
            StatusbarUtils.enableTranslucentStatusbar(this);
            setContentView(R.layout.activity_main);
    
        }

    上面的代码中我使用 StatusbarUtils 这个辅助类,这个辅助类调用了 具体的实现透明状态栏的方法。这个类的完整代码如下:

    package zhangyf.vir56k.translucentbardemo;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Build;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    
    /**
     * 状态栏辅助类
     * Created by zhangyunfei on 16/6/17.
     */
    public class StatusbarUtils {
    
        /**
         * 启用 透明状态栏
         * @param activity
         */
        public static void enableTranslucentStatusbar(Activity activity) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = activity.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_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
                window.setNavigationBarColor(Color.TRANSPARENT);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                Window window = activity.getWindow();
                // Translucent status bar
                window.setFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                // Translucent navigation bar
                window.setFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            }
        }
    }

    android:fitsSystemWindows 标签

      android 提供了 android:fitsSystemWindows 标签,来适配窗体,实际我们可以在我们的布局视图里使用它。它会使得指定的view自动增加“一个状态栏高度的上间距”,也就是说,它会在保证你的view位于状态栏下方,而不是底下。
      android:fitsSystemWindows="true"

    示例源代码下载

    https://github.com/vir56k/demo/tree/master/TranslucentBarDemo

  • 相关阅读:
    志愿者招募 [NOI2008] [鬼畜网络流]
    莫队入门
    分块入门
    高速公路 [HAOI2012] [线段树]
    游历校园 [COGS 614] [欧拉图]
    网络吞吐量 [CQOI2015] [网络流]
    LeetCode 27. Remove Element
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 21. Merge Two Sorted Lists
    LeetCode 20. Valid Parentheses
  • 原文地址:https://www.cnblogs.com/benchao/p/5623998.html
Copyright © 2011-2022 走看看