实现应用皮肤随意切换,这里只做基础展示,一个是常规肤色,一个是夜晚模式肤色
效果如下:
步骤如下:
1、引入换肤三方框架
2、在Application中对换肤SkinCompatManager进行初始化
3、在main下新建自己对应肤色res文件夹(后缀可自定义,此列举res-night),和res-night下的子项资源,注意color和drawable下的命名尾部都必须跟上 ‘ _night ’
4、在app gradle 中添加资源地址
sourceSets {main {res.srcDirs = ['src/main/res', 'src/main/res-night']}}
5、代码实现换肤
代码如下:
1、 引入换肤三方框架
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 控件支持[可选]
2、在Application中对换肤SkinCompatManager进行初始化
SkinCompatManager.withoutActivity(this) // 基础控件换肤初始化
.addInflater(new SkinMaterialViewInflater()) // material design 控件换肤初始化[可选]
.addInflater(new SkinConstraintViewInflater()) // ConstraintLayout 控件换肤初始化[可选]
.addInflater(new SkinCardViewInflater()) // CardView v7 控件换肤初始化[可选]
.setSkinStatusBarColorEnable(false) // 关闭状态栏换肤,默认打开[可选]
.setSkinWindowBackgroundEnable(false) // 关闭windowBackground换肤,默认打开[可选]
.loadSkin();
3、在main下新建自己对应肤色res文件夹
res-night下的color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary_night">#008577</color>
<color name="colorPrimaryDark_night">#00574B</color>
<color name="colorAccent_night">#D81B60</color>
<color name="tool_bar_night">#fff</color>
</resources>
4、在app gradle 中添加资源地址
sourceSets {main {res.srcDirs = ['src/main/res', 'src/main/res-night']}}
5、代码实现换肤
public class MainActivity extends AppCompatActivity {
private Button btnNormal;
private Button btnNight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
btnNormal = findViewById(R.id.btn_normal);
btnNight = findViewById(R.id.btn_night);
btnNormal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SkinCompatManager.getInstance().restoreDefaultTheme();
}
});
btnNight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 指定皮肤插件
SkinCompatManager.getInstance().loadSkin("night", null, SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);
}
});
}
}