Android透明状态栏

来源:互联网 发布:淘宝动漫海报店推荐 编辑:程序博客网 时间:2024/04/30 12:34

概述

有时候我们想在 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

0 0
原创粉丝点击