转载:

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)了。

效果如下:

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

public class MatchActionBarActivity extends Activity { @Overrideprotected 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);    }}


更多相关文章

  1. android中给用户提醒的三种方式
  2. 【Android】利用服务Service创建标题栏通知
  3. 基于ARouter的组件化开发
  4. Android(安卓)4.2.2 ScreenLock上Music远程播放控制界面的创建流
  5. Android跳转到系统通知管理页面
  6. Android培训班(13)
  7. android线程间通信和主线程更新ui
  8. Android(安卓)当媒体变更后,通知其他应用重新扫描
  9. Android(安卓)JNI入门第六篇――C调用Java

随机推荐

  1. EditText在输入法上显示搜索按钮
  2. 2011.09.22——— android ViewStub的简
  3. android常用代码片段
  4. android 不自动弹出虚拟键盘
  5. Android应用程序组件Content Provider的
  6. ubuntu 11.10 搭建 Android(安卓)开发环
  7. android framework
  8. Basic4android (Basic for Android) - Ra
  9. App 权限一点知识
  10. android EditText 去除边框