Android-skin-support框架使用的一些些坑

坑一:自己创建新的demo项目,测试基础控件换肤功能,发现无论如何都换肤不成功,皮肤使用下载的night.skin

按照githut上面的步骤执行添加之后你会发现,仍然无法实现换肤,在监听里面一直提示资源获取失败。

                  先说说github上面的步骤(实现最简单的换肤功能)

1:导入依赖: compile 'skin.support:skin-support:2.2.3' ,这是导入基础控件的换肤

2:导入皮肤包,我最开始是用放在应用里面的方法,即将皮肤包放在app/assets/skins下面,一定要放在skins下面

3:自定义Application,在onCreate中初始化换肤的管理类(SkinCompatManager)

4:将要换肤的activity继承SkinCompatActivity,在要换肤的地方调用换肤方法,

SkinCompatManager.getInstance().loadSkin("night.skin");

入参可以自己查看,可以实现监听等

这些是githut上面说明的方法,但是但是不行,我在这儿坑了好久,最后发现需要添加权限,就没想到还要添加读写外部存储权限

   坑二:当上面成功之后,你觉得自己已经实现换肤功能了,但是当自己制作皮肤包时又被坑了一把。

        还是github上面已给出的方法。

        1:新建Android Application,皮肤工程包名不能和宿主包名相同,就这一步一直有疑问,开始不知道具体创建哪个module;

        1.1(补充):module必须与app在同一个Application/Library name:下否则打包时找不到module

        2:修改对应资源

3:打包生成APK,这步是最坑的,刚开始以为直接将对应module Run就OK的,然后会出现没有默认activity问题,这个百度了下就解决了,然后就这样生成了apk了,改名放入assets中发现无效,同样找了好久问题。

对应新建哪个module的问题,需要新建Phone & Table Module 这个,选择无activity

对于打包问题,需要用到studio下面的Terminal命令行来编译: ./gradlew :skin3:assembleDebug  skin3就是对应皮肤包名。

打包完的apk路径:/work/demos/soarosLauncher/skin/Skins/skin3/build/outputs/apk/debug。

   坑三:如果想将皮肤包放到sdCard中,不能指定存放位置,固定需要写入:/Android/data/你的应用包名/cache/skins/

        我发现放在assets下面的皮肤包也会被放置到上面的路径下面,然后在执行换肤,所以第一条里面的读写权限

以上原文出处链接:https://www.jianshu.com/p/366dc3bee6c8


在下个人补充一点坑 

1.应用内换肤找不到res-night

    要把res-night文件夹的信息添加到app的gradle中

sourceSets {

        main {

                    res.srcDirs = ['src/main/res','src/main/res-night']

                }

    }

写在android{}之内

2.应用内换肤时所有的资源文件都要加上后缀 _night 

包括 xml文件 layout文件 drawable文件 图片资源 

你可能感兴趣的:(Android-skin-support框架使用的一些些坑)