android 沉浸式通知栏,Android沉浸式通知栏

转载:

http://www.bkjia.com/Androidjc/954431.html

http://blog.csdn.net/zhaoyw2008/article/details/40622919

ystemBarTint链接:https://github.com/jgilfelt/SystemBarTint

最早听这个概念是在MI4发布会上,雷布斯鼓吹的一个概念,让原先安然无光,黑色的通知栏,变成与APP主题相一致的颜色,经过度娘,得知是从4.4开始,Android已经有这个概念(ImmersiveMode)了。

效果如下:

0818b9ca8b590ca3270a3433284dd417.png

使用方法比较简单,官方给了一个例子:

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);

}

}

——————————————————————————————————————————————————————————————————

使用过程中:

问题一:

对所有activity组件写了父类的absUI,absactionUI,应该在setContentView()之前,对窗口属性进行初始化,赋值。

@Override

public void setContentView(int layoutResID) {

StatusBarUtil.initStyle(this);

super.setContentView(layoutResID);

}

问题二:如果 Activity 有 actionbar,那么还需要在 Activity 的布局文件的根节点上设置两个属性

/**重要*/

mContainer.setClipToPadding(true);

mContainer.setFitsSystemWindows(true);

问题三:理解activity 继承关系

public class StatusBarUtil {

private static Window mWindow;

private static Activity mactivity;

/**

*沉浸式通知栏 初始化

* */

public static void initStyle(Activity activity){

mactivity = activity;

mWindow = activity.getWindow();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

mWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

mWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}

initSystemBar();

}

private static void initSystemBar() {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

//状态栏透明 需要在创建SystemBarTintManager 之前调用。

setTranslucentStatus(true);

SystemBarTintManager tintManager = new SystemBarTintManager(mactivity);

tintManager.setStatusBarTintEnabled(true);

tintManager.setStatusBarTintResource(R.color.status_bar);

}

}

@TargetApi(19)

private static void setTranslucentStatus(boolean on) {

WindowManager.LayoutParams winParams = mWindow.getAttributes();

final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;

if (on) {

winParams.flags |= bits;

} else {

winParams.flags &= ~bits;

}

mWindow.setAttributes(winParams);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值