Android----一键换肤功能

前言

            最近项目需要做一键换肤功能,作为移动端(手机app、平板)开发者来说,这是一个常用的功能。实现此功能,先聊聊初始设计方向,一键换肤功能,其实最好是在项目启动时期就有,这样的好处在于,

开发者在设计架构的时候,能够方便的对资源文件进行合理性命名(图片、颜色)。

            例如:项目整体色调是绿色,那么标题栏的颜色如果是纯色。我们可能会在color的配置文件中这样写:

            <color name="base_bg_green_title">#33CC99</color>

           如果项目内有多个绿色纯色按钮,我们可能会这样写:

                        <color name="base_btn_green">#1FF9D0</color>

           如果项目中有不是纯黑色或者纯白色文字,我们可能会这样写:

                          <color name="base_text_white">#FFFFFa</color>

                           <color name="btn_text_black">#000004</color>

           这样的话,当项目在完结时候,如果要做一键换肤,改动就比较大。你要区分多种资源文件的值。如果是在项目的初期,设定了要做一键换肤。那么在最初的资源命名,我们就会采用如下写法:

                        <color name="base_bg_whatever_title">#33CC99</color>

                        <color name="base_btn_whatever">#1FF9D0</color>

                        <color name="base_text_whatever">#FFFFFa</color>

         将基础资源命名为任意。这样便于后期做一键换肤。下文会展开如何快捷的实现此功能。

如何实现:

        实现方式有多种,有人会在代码里动态配置if else或者switch语句,通过事件触发去判断加载哪些文件。通过广播或者eventBus去通知更新。这个的好处在于。。。。练手。下面我直接讲解下如何简单使用吧。

        目前github上最火的一种换肤方式:Android-skin-support集成

第一步:添加依赖:

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

 

第二步:在Application的onCreate中初始化   :

@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();
}

第三步: 如果项目中使用的Activity继承自AppCompatActivity,需要重载getDelegate()方法

@NonNull
@Override
public AppCompatDelegate getDelegate() {
    return SkinAppCompatDelegateImpl.get(this, this);
}

第四步:在项目创建需要换肤的资源文件

默认:

黄肤:

简述:在项目内创建一个res文件,起名如:res-yellow或者res-red或者res-blue。内部的资源文件都以新建的res文件结尾的命名去增加字符。如上图所示。这样在程序启动后可以自动去加载。

第五部:去build.gradle配置引入方式

博主当前是默认皮肤绿色,换肤颜色黄色。

这样就配置进去了。

第六部:点击切换

提供2个方法基础方法:自行编写点击事件

// 恢复默认皮肤
SkinCompatManager.getInstance().restoreDefaultTheme();

// 指定皮肤插件
SkinCompatManager.getInstance().loadSkin("yellow", null, SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);

 

 

 

 

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土狗的想法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值