Android 透明状态栏&着色状态栏

Android 5.0 及以上实现方式(android在5.0之后引入Material Design 实现方式相对简单)

透明状态栏,背景浸入状态栏

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

在布局文件中View 默认fitsSystemWindows 值为 false 因此会看到整个布局是从最顶端开始的,如果布局顶端有TextView 会看到状态栏覆盖了TextView。这种情况下可以针对特定的布局设置

android:fitsSystemWindows="true"

哪个view设置了这个属性为true,系统就会调整该view的padding值来留出空间给系统窗体。表现为,padding出status bar的高度给status bar使用,不至于我们定义layout跟status bar重叠!

着色状态栏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    // 有些情况下需要先清除透明flag
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(getResources().getColor(R.color.green));
}

你可能感兴趣的:(Android 透明状态栏&着色状态栏)