Android:换肤框架Android-Skin-Support

gihub地址:https://github.com/ximsfei/Android-skin-support

样例:

默认:

更换后:

一、引入依赖:

// -- 换肤依赖
    implementation 'skin.support:skin-support:4.0.5'// skin-support
    implementation 'skin.support:skin-support-appcompat:4.0.5'// skin-support 基础控件支持
    implementation 'skin.support:skin-support-design:4.0.5'// skin-support-design material design 控件支持[可选]
    implementation 'skin.support:skin-support-cardview:4.0.5'// skin-support-cardview CardView 控件支持[可选]
    implementation 'skin.support:skin-support-constraint-layout:4.0.5'// skin-support-constraint-layout ConstraintLayout 控件支持[可选]

二、创建MyApplication:

public class Myapplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SkinCompatManager.withoutActivity(this)
                .addInflater(new SkinAppCompatViewInflater())           // 基础控件换肤初始化
                .addInflater(new SkinMaterialViewInflater())            // material design 控件换肤初始化[可选]
                .addInflater(new SkinConstraintViewInflater())          // ConstraintLayout 控件换肤初始化[可选]
                .addInflater(new SkinCardViewInflater())                // CardView v7 控件换肤初始化[可选]
                .setSkinStatusBarColorEnable(false)                     // 关闭状态栏换肤,默认打开[可选]
                .setSkinWindowBackgroundEnable(false)                   // 关闭windowBackground换肤,默认打开[可选]
                .loadSkin();


    }


}

AndroidManifest.xml配置MyApplication.java:

三、创建需要换肤的资源

(1)选中main -> 右键New->Directory 创建res-后缀名

 (2)res-后缀名资源文件下创建对应的drawable、values等资源文件,如下图所示

以res-red资源为例:

shape_my_info_bg_red.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="90"
        android:endColor="#E91E63"
        android:startColor="#70E91E63" />
</shape>

 colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="skin_topbar_text_color_red">#860F08</color>
    <color name="skin_button_color_red">#CA493F</color>
</resources>

四、初始布局使用默认res文件下资源

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/shape_my_info_bg"
    tools:context=".MainActivity">

    <!--标题-->
    <TextView
        android:id="@+id/topBarTv"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="center"
        android:textStyle="bold"
        android:textSize="20sp"
        android:text="标题信息"
        android:textColor="@color/skin_topbar_text_color"/>

    <Button
        android:id="@+id/changeBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="@drawable/shape_my_info_bg"
        android:textStyle="bold"
        android:textColor="@color/skin_button_color"
        android:text="一键换肤(默认颜色)"/>

    <Button
        android:id="@+id/changeRedBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="@drawable/shape_my_info_bg"
        android:textStyle="bold"
        android:textColor="@color/skin_button_color"
        android:text="一键换肤(红色)"/>


    <Button
        android:id="@+id/changeYellowBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="@drawable/shape_my_info_bg"
        android:textStyle="bold"
        android:textColor="@color/skin_button_color"
        android:text="一键换肤(黄色)"/>





</LinearLayout>

五、使用

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 
    // 换肤按钮
    // 默认皮肤
    private Button changeBtn;
    // 红色皮肤
    private Button changeRedBtn;
    // 黄色皮肤
    private Button changeYellowBtn;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initControls();

    }


    // 控件初始化
    private void initControls(){
        // 默认颜色
        changeBtn = findViewById(R.id.changeBtn);
        changeBtn.setOnClickListener(this);
        // 红色
        changeRedBtn = findViewById(R.id.changeRedBtn);
        changeRedBtn.setOnClickListener(this);
        // 黄色
        changeYellowBtn = findViewById(R.id.changeYellowBtn);
        changeYellowBtn.setOnClickListener(this);

    }

    /**
     * 点击事件
     * */
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.changeBtn:// 默认颜色
                // 恢复默认皮肤
                SkinCompatManager.getInstance().restoreDefaultTheme();
                break;
            case R.id.changeRedBtn:// 红色
                // 前缀加载
                //SkinCompatManager.getInstance().loadSkin("light", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN);
                // 后缀加载
                SkinCompatManager.getInstance().loadSkin("red", null,SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);
                break;
            case R.id.changeYellowBtn:// 黄色
                // 前缀加载
                //SkinCompatManager.getInstance().loadSkin("light", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN);
                // 后缀加载
                SkinCompatManager.getInstance().loadSkin("yellow", null,SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);
                break;
        }
    }

    /**
     * 如果项目中使用的Activity继承自AppCompatActivity,需要重载getDelegate()方法
     * */
    @NonNull
    @Override
    public AppCompatDelegate getDelegate() {
        return SkinAppCompatDelegateImpl.get(this, this);
    }



}

猜你喜欢

转载自blog.csdn.net/qq_19688207/article/details/132216687