Giter Club home page Giter Club logo

lightimmersionmode's Introduction

LightImmersionMode

十分方便的实现纯色沉浸式状态栏的开发,只需要使用代码,不需要在布局额外写任何东西

效果演示

1.0.5更新

  • 优化代码,保存手机型号版本从而使匹配机型报错提示只出现一次

1.0.4更新

  • 修复对MIUI开发版7.7.13以上的支持,就是支持从2017年7月13日以后发布的所有MIUI稳定版和开发版,不更新会造成浅色模式在MIUI上失效。

1.0.3更新

  • 修复对Flyme6.0以上的支持,这个锅是魅族的,他偷偷改了api

1.0.2更新

  • 添加关闭框架的方法演示
  • 添加Android4.4显示或者隐藏插入的statusView方法演示
  • 删除了TemporaryConfig类,使用ImmersionConfiguration来完成
  • 大幅度修改框架运行逻辑,避免在Android4.4中,出现的种种BUG
  • Android4.4实现沉浸式较为复杂,所以只能使用较为复杂的逻辑来保证不会出现BUG,Android5.0以上都是非常简单的调用,不用考虑生命周期,也不用考虑调用方法先后顺序。如果有需要单独大于Android5.0的框架,请在issues中留言,我会酌情考虑。

引用方法

  • 在gradle中:
    compile 'spa.lyh.cn:immersion-sdk:1.0.5'
  • 在maven中:

<dependency>
	<groupId>spa.lyh.cn</groupId>
	<artifactId>immersion-sdk</artifactId>
	<version>1.0.5</version>
	<type>pom</type>
</dependency>

主要的类介绍

  • ImmersionMode : 沉浸式状态栏的主体类
  • ImmersionConfiguration : 沉浸式状态栏的配置类

使用方式

  • 本框架沉浸式效果仅支持API LEVEL >= 19以上的系统才可以生效对应效果
  • 本框架浅色状态栏,自适应字体仅支持MIUI或者Flyme系统,或者API LEVEL >= 23的其他系统才会有对应效果
  • 本框架支持最低API LEVEL >= 11但是API LEVEL < 19,会造成本框架不运行,不会造成程序崩溃

先完成ImmersionModeImmersionConfiguration的初始化配置

//初始化对应的配置
ImmersionConfiguration configuration = new ImmersionConfiguration
        .Builder(this)
        .enableImmersionMode(ImmersionConfiguration.ENABLE)
        .setColor(R.color.bar_color)
        .build();
//完成ImmersionMode的配置初始化
ImmersionMode.getInstance().init(configuration);

在activity的onCreate()生命周期中完成单例,并需要重写setContentView()方法,在其中完成方法调用

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        immersionMode = ImmersionMode.getInstance();
    }

    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        super.setContentView(layoutResID);
        immersionMode.execImmersionMode(this);
    }
}

修改临时配置的方法,一次性的设置不会影响默认的配置,再次加载会重新加载默认设置

    //使用资源的colorID赋值
    public void changeStatusBarColor(int ResId){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            ImmersionConfiguration tConfig = new ImmersionConfiguration.Builder(this)
                    .setColor(ResId)
                    .build();
            immersionMode.setTemporaryConfig(tConfig);
            immersionMode.execImmersionMode(this);
        }
    }
    //使用String的Color
    public void changeStatusBarColor(String color){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            ImmersionConfiguration tConfig = new ImmersionConfiguration.Builder(this)
                    .setColor(color)
                    .build();
            immersionMode.setTemporaryConfig(tConfig);
            immersionMode.execImmersionMode(this);
        }
    }

Config的所有属性介绍

//启动
public static int ENABLE = 100;
//不启动
public static int DISABLE = 101;
  • ImmersionConfiguration的属性设置方法

    enableImmersionMode():是否启动沉浸式状态栏,默认为:ENABLE

    setColor():传入资源id或者String型Color,默认为:#D0D0D0

框架的完成思路

  • 沉浸式状态栏的实现思路

    API LEVEL >= 19 && API LEVEL < 21:

    使用window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);开启沉浸式并在状态栏位置添加一个带有对应颜色的View填充

    API LEVEL >= 21:

    Window window = activity.getWindow();
    window.setStatusBarColor(color);

    实现方式为直接修改状态栏颜色,非沉浸式实现

  • 浅色状态栏的实现思路 系统必须为MIUI或者Flyme或者API LEVEL >= 23的其他系统,这里不展示MIUI与Flyme的实现思路只展示原生的开发思路

    //设置为浅色状态栏模式,深色字体
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    //设置为普通的状态栏模式,浅色字体
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
  • 深浅色判断逻辑

    通过YUV模式,用色彩明亮度,色度,浓度来判断深浅色

    public static boolean isLightRGB(int[] colors){
        int grayLevel = (int) (colors[0] * 0.299 + colors[1] * 0.587 + colors[2] * 0.114);
        if(grayLevel>=192){
            return true;
        }
        return false;
    }

注意事项

  • 因为API LEVEL >= 19 && API LEVEL < 21时,使用的沉浸式开发,方法immersionMode.execImmersionMode(this);会在setContentView()完成以后立刻调用,又因为沉浸式开发,是不可逆的设置,意思就是如果开启沉浸式,除非重新加载Activity否则无法翻转此状态。所以想要关闭本框架,那么对应方法必须在setContentView()之前调用,否则在Android4.4上会出现框架依然启动的BUG。
  • 最低API LEVEL >= 21时,可以无视上述问题,因为Android5.0以上并没有使用沉浸式开发,所以使用本框架可以不许重写setContentView()等种种限制运行顺序和生命周期的方式,只要在onResume()之前任意位置调用即可。

联系方式

有任何意见和问题,欢迎在issues中提出,一定尽快回复。

lightimmersionmode's People

Watchers

started developer  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.