羊皮书APP(Android版)开发系列(七)Android沉浸通知栏

为了我们的app看起来更漂亮,处理下通知栏是很有必要的,下面是沉浸通知栏的一种实现方式。我们在项目中使用一些通用的方法时,要学会提炼出基础类,供其他类来使用,减少代码重复,增加程序健壮性和可读性。

  • Android沉浸通知栏,有一个开源库SystemBarTint,效果如下:

这里写图片描述

  • 使用方法:在Activity中添加相关代码,Demo如下:
public class MatchActionBarActivity extends Activity {   
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_match_actionbar);  
  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
            setTranslucentStatus(true);  
        }  
  
        SystemBarTintManager tintManager = new SystemBarTintManager(this);  
        tintManager.setStatusBarTintEnabled(true);  
        tintManager.setStatusBarTintResource(R.color.statusbar_bg);//通知栏所需颜色  
  
    }  
  
    @TargetApi(19)   
    private void setTranslucentStatus(boolean on) {  
        Window win = getWindow();  
        WindowManager.LayoutParams winParams = win.getAttributes();  
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;  
        if (on) {  
            winParams.flags |= bits;  
        } else {  
            winParams.flags &= ~bits;  
        }  
        win.setAttributes(winParams);  
    }  
  
}  
  • 在APP中使用的时候,我们不要在每个Activity中都重复写这么一段代码,而是要自己定义一个基础的抽象Activity类,用于其他Activity继承,减少代码重复。这里给出我定义的一个基础抽象Activity类BaseActivity.java,代码如下:
package cn.studyou.parchment.activity;

import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;

import com.readystatesoftware.systembartint.SystemBarTintManager;

import cn.studyou.parchment.R;

/**
 * 基本功能:基础Activity类
 * 创建:王杰
 * 创建时间:16/3/9
 * 邮箱:w489657152@gmail.com
 */
public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setTranslucentStatus(true);
        }
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setStatusBarTintResource(R.color.green);//通知栏所需颜色
    }

    @TargetApi(19)
    private void setTranslucentStatus(boolean on) {
        Window win = getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        if (on) {
            winParams.flags |= bits;
        } else {
            winParams.flags &= ~bits;
        }
        win.setAttributes(winParams);
    }
}
  • 然后每个Activity中继承BaseActivity即可,如下:
package cn.studyou.parchment.activity;

import android.os.Bundle;

import cn.studyou.parchment.R;

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
  • 最后一步,要在布局文件中添加如下代码:
android:fitsSystemWindows="true"
android:clipToPadding="false"
  • 添加后的布局文件代码形式如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/green"
    android:fitsSystemWindows="true"
    android:clipToPadding="false"
    >
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"
        android:textSize="@dimen/normal"/>
</RelativeLayout>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏学海无涯

Android开发之Fragment回退栈

在Android开发之Fragment动态使用一文中,说到replace方法切换Fragment,会造成Fragment不断销毁、创建,但是有没有办法实现像Ac...

3024
来自专栏Android干货

Android 购物车功能的实现

4675
来自专栏Android干货

浅谈SnackBar(Toast大兄弟)

1354
来自专栏沃趣科技

Oracle 12c系列(7)| Non-CDB转换为PDB

当我们需要将Non-CDB数据库类型更改为PDB数据库类型时,可以使用Cloning的方式将其复制到现有的CDB中,但是该方法需要将Non-CDB中的数据文件复...

3889
来自专栏向治洪

android几种常见的启动模式

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和...

2036
来自专栏分享达人秀

探究Fragment生命周期

一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用。Fragment可以响应自己的输入事件,并拥有...

3194
来自专栏项勇

笔记39 | 数据存储之SharedPreferences的介绍及使用

1524
来自专栏非著名程序员

Android快速开发框架 roboguice

我记得推过一篇文章也是快速开发框架的,今天再来一篇! 1、roboguice 效果 ---- ? 图文无关 2、roboguice 说明 ---- robo...

2028
来自专栏编程之路

羊皮书APP(Android版)开发系列(五)APP引导页实现

1145
来自专栏Android干货

浅谈SnackBar(Toast大兄弟)

2694

扫码关注云+社区

领取腾讯云代金券