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



}
相关推荐
七月.末1 小时前
安卓aab包的安装教程,附带adb环境的配置
android·adb
SRC_BLUE_177 小时前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道10 小时前
Android打包流程图
android
镭封11 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰48711 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛12 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二12 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫12 小时前
Android开发中的隐藏控件技巧
android
Winston Wood14 小时前
Android中Activity启动的模式
android
众乐认证14 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto