前几天在研究主题换肤功能,然后在自己的一个App框架Demo中尝试了主题换肤,功能是实现了,就是效果还没有那么完善。
1.引入:
首先在自己的build.gradle中引入该第三方框架,第一项是必选的,后面三项可以根据自己的需求来。
compile 'skin.support:skin-support:2.2.3' // skin-support basic widget
compile 'skin.support:skin-support-design:2.2.3'
compile 'skin.support:skin-support-cardview:2.2.3'
compile 'skin.support:skin-support-constraint-layout:2.2.3'
2.初始化
在自己的Application的onCreate方法中进行初始化:
SkinCompatManager.withoutActivity(this).loadSkin();
SPUtils.init(this);//这个主要是框架作者使用夜间模式和正常模式切换的时候,用于存储模式信息用的
3.使用
例如要使用夜间模式:
SkinCompatManager.getInstance().loadSkin("night.skin", new SkinCompatManager.SkinLoaderListener() {
@Override
public void onStart() {
}
@Override
public void onSuccess() {
//这里是切换成功后的回调,可以做一些自己想要的设置
}
@Override
public void onFailed(String s) {
}
});
恢复默认的模式:
SkinCompatManager.getInstance().restoreDefaultTheme();
4.皮肤包的制作:
在第三步中,使用了一个名为”night.skin”的皮肤包。它是由我们本地制作的。
接下来介绍一下制作过程:
首先新建一个项目(File-new-new project),名字随便取,为了好理解,我建了一个Night的工程。
在这个Night的res的color.xml中:
设置夜间模式的一些需要的颜色
<!--头部状态栏颜色-->
<color name="colorPrimary">#000000</color>
<!--toolbar和底部导航栏的文字颜色-->
<color name="colorWhite">#ffffff</color>
<!--统一的文字颜色-->
<color name="colorText">#ffffff</color>
<!--统一的背景颜色-->
<color name="colorGray">#000000</color>
我们再看看自己工程下的color.xml文件:
<!--头部状态栏颜色-->
<color name="colorPrimary">#3F51B5</color>
<!--toolbar和底部导航栏的文字颜色-->
<color name="colorWhite">#ffffff</color>
<!--统一的文字颜色-->
<color name="colorText">#000000</color>
<!--统一的背景颜色-->
<color name="colorGray">#cccccc</color>
两者需要用到的颜色命名需要一致,颜色值可以根据自己的需求来。
我这里只是简单地使用一下这个主题换肤功能,所以没有对颜色要求很多。
接着在需要使用这些颜色的地方设置就好了,例如:
<TextView
android:id="@+id/common_title"
android:text="title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/colorText"
android:textSize="@dimen/font_big"
android:visibility="visible" />
这个TextView在正常模式下的颜色是:
<color name="colorText">#ffffff</color>
而到了夜间模式就变成了:
<color name="colorText">#000000</color>
颜色都设置好了以后,我们对Night这个工程进行打包:
步骤:Build->Build APK(s)
找到打包完的apk文件,将xxx.apk 改名为 night.skin,
最后在自己的项目的main下新建assets文件夹,在这下面新建一个skins文件夹,将night.skin放进去就OK了!
以上就是使用这个主题换肤功能的过程了,整个过程还是挺简单的,但是目前这个第三方框架好像还不支持状态栏换肤,所以还是有点小遗憾,希望它后面能实现吧。
最后这是我在github上找的这个主题换肤的第三方框架,下面是地址:
https://github.com/ximsfei/Android-skin-support
有兴趣的小伙伴可以去看一下或者尝试一下。