zoukankan      html  css  js  c++  java
  • Android沉浸式状态栏的简单实现

    随着卡片式设计在Android系统的上越来越流行,比如现在早已经烂大街的沉浸式状态栏,几乎所有的主流的APP都支持沉浸式状态栏,如QQ、UC浏览器等等。所以觉得有必要学习一下,找了点资料,总结了一下,未测试低版本的效果,如果有测试的话欢迎反馈一下。只是简单的记录这一步骤,更深层次的代码请访问 http://www.open-open.com/lib/view/open1455584716230.html 这里面的大神写的很详细。

    实现效果

    Screenshot_20170104-162632.png

    • 未进行状态栏沉浸效果,状态栏为黑色的

    Screenshot_20170104-161117.png

    +注意观察顶部,不再是黑黑的状态栏了,比原来好看多了

    实现原理

    1. 通过配置标志位来配置状态栏透明
    2. 创建一个和状态栏大小一致的矩形VIew
    3. 添加到布局中,并配置

    具体代码

    • 创建一个类ImmersiveStatusBar.java 内部包含下面两个静态的方法
    • 在Activity中在setContentLayout中,调用本类的setColor即可实现沉浸式状态栏,如
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
      ImmersiveStatusBar.setColor(this,0x387fb5);
      ......
    }
    
    • setColor()方法
    public static void setColor(Activity activity, int color) {
    //限制android系统的版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 设置状态栏透明 
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 生成一个状态栏大小的矩形
            View statusView = createStatusView(activity, color);
            // 添加 statusView 到布局中
            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
            decorView.addView(statusView);
            // 设置根布局的参数
            ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
            rootView.setFitsSystemWindows(true);
            rootView.setClipToPadding(true);
        }
    }
    
    • 其中createStatusView()方法代码如下:
    /**
     * 生成一个和状态栏大小相同的矩形条
     * @param activity 需要设置的activity
     * @param color 状态栏颜色值
     * @return 状态栏矩形条
     */
    private static View createStatusView(Activity activity, int color) {
        // 获得状态栏高度
        int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
        int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);
        // 绘制一个和状态栏一样高的矩形
        View statusView = new View(activity);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,            statusBarHeight);
        statusView.setLayoutParams(params);
        statusView.setBackgroundColor(color);
        return statusView;
    }
    
  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/zhoutao825638/p/10382018.html
Copyright © 2011-2022 走看看