Android 拿来系列之日夜间模式

   闲的没事,寻思着写个博客吧.

 项目上周准备开个日夜间 功能,花了很长时间找到合适的了,效果还不错,可惜要留到第二版了.

 日夜间模式:网上能给到的很常见的就有三种,Android自带俩种,第三种其实就是自己监听点击事件了,,,,各种设置

 这里推荐两种:蒙层!

    https://blog.csdn.net/u013478336/article/details/52484322

 

    WindowManager manager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT ,WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_APPLICATION ,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);
     
    params.gravity = Gravity.TOP;
    params.y = 10 ;
     
    TextView tv = new TextView( this);
    tv.setBackgroundColor(0xAA000000 );
    manager.addView(tv,params);

完全可以用,但是也有Bug 很难在多个不同界面实现遮盖,可以通过add  remove  也可以通过 这个tv的显示隐藏,如果你的项目只有一个Activity,完全可以用蒙层


第二种:拿来

拿来奥义之术: 粘门 开!

有点逗比,但是我乐意啊

https://github.com/ximsfei/Android-skin-support


流程具体说说:


1.准备除了项目的现有drawable(想换换,不换拉倒),color(必须),再准备最少1套资源颜色 的Name 都统统对应上,比如项目上是白天的颜色,夜间模式color的值就换个对应的夜间的颜色

2.依赖

implementation 'skin.support:skin-support:3.1.0-beta1'                   // skin-support 基础控件支持
implementation 'skin.support:skin-support-design:3.1.0-beta1'            // skin-support-design material design 控件支持[可选]
implementation 'skin.support:skin-support-cardview:3.1.0-beta1'          // skin-support-cardview CardView 控件支持[可选]
implementation 'skin.support:skin-support-constraint-layout:3.1.0-beta1' // skin-support-constraint-layout ConstraintLayout 控件支持[可选]

如果你的项目不差这几K,那就别选不选的了,全放上吧

3.初始化Application

@Override
public void onCreate() {
    super.onCreate();
    SkinCompatManager.withoutActivity(this)                         // 基础控件换肤初始化
            .addInflater(new SkinMaterialViewInflater())            // material design 控件换肤初始化[可选]
            .addInflater(new SkinConstraintViewInflater())          // ConstraintLayout 控件换肤初始化[可选]
            .addInflater(new SkinCardViewInflater())                // CardView v7 控件换肤初始化[可选]
            .setSkinStatusBarColorEnable(false)                     // 关闭状态栏换肤,默认打开[可选]
            .setSkinWindowBackgroundEnable(false)                   // 关闭windowBackground换肤,默认打开[可选]
            .loadSkin();
}

4.开始粘

  SkinCompatManager.getInstance().loadSkin("night.skin", null, SKIN_LOADER_STRATEGY_ASSETS);//加载夜间模式  这个不闪屏啥的

第一个参数:文件

第二个:监听

第三个:加载策略  这里放上的 大致意思就是加载本地asset文件下的文件 

其实这个库就是通过安卓加载dex文件,读取文件的资源进行替换使用

    这个是我想象的,反正感觉肯定是类加载机制 classLoader/dexloader,就那俩种,类似的机制吧.

5.做文件

建个moudle

把另一套color/资源   啥的都放上,然后,第四个,然后在你这个moudle的build,outputs,找到一个.apk文件,然后改个名,随便起,一般都是上面那个.skin结尾,防止重复么.然后,在你的项目main /assets 把这个放进去,OK了.调用方法第一个参数名字传对啊,完事





猜你喜欢

转载自blog.csdn.net/flypig_vip/article/details/80975867