前几天在研究主题换肤功能,然后在自己的一个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
有兴趣的小伙伴可以去看一下或者尝试一下。