實現應用皮膚隨意切換,這裏只做基礎展示,一個是常規膚色,一個是夜晚模式膚色
效果如下:
步驟如下:
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);
}
});
}
}