App一鍵換膚功能

實現應用皮膚隨意切換,這裏只做基礎展示,一個是常規膚色,一個是夜晚模式膚色

效果如下:

步驟如下:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章