Android实战:APP换肤功能,并自动适配手机深色模式

#0D47A1

#FAFAFA

#757575

#424242

#212121

style 是支持继承的, 以上述为例,app_skin_1 继承自 AppTheme, 在通过 attr 寻找其值时,如果在 app_skin_1 没找到,那么它就会去 AppTheme 寻找。因此我们可以把 App 的 theme 作为我们的一个 skin, 其它 skin 都继承自这个 skin。

1.3 自定义换肤管理类

APP的不同皮肤、颜色已定义好,我们需要定义一个类,与QMUI对接,用于管理这些皮肤,代码功能包含:皮肤的加载、切换等操作。

src/main/java/com/qxc/testandroid/QDSkinManager.java:

package com.qxc.testandroid;

import android.content.Context;

import android.content.res.Configuration;

import com.qmuiteam.qmui.skin.QMUISkinManager;

public class QDSkinManager {

public static final int SKIN_DEFAULT = 1;

public static final int SKIN_1 = 2;

public static final int SKIN_2 = 3;

public static void install(Context context) {

QMUISkinManager skinManager = QMUISkinManager.defaultInstance(context);

skinManager.addSkin(SKIN_DEFAULT, R.style.AppTheme);

skinManager.addSkin(SKIN_1, R.style.app_skin_1);

skinManager.addSkin(SKIN_2, R.style.app_skin_2);

boolean isDarkMode = (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;

int storeSkinIndex = QDPreferenceManager.getInstance(context).getSkinIndex();

if (isDarkMode && storeSkinIndex != SKIN_2) {

skinManager.changeSkin(SKIN_2);

} else if (!isDarkMode && storeSkinIndex == SKIN_1) {

skinManager.changeSkin(SKIN_1);

}else{

skinManager.changeSkin(storeSkinIndex);

}

}

public static void changeSkin(int index) {

QMUISkinManager.defaultInstance(QDApplication.getContext()).changeSkin(index);

QDPreferenceManager.getInstance(QDApplication.getContext()).setSkinIndex(index);

}

public static int getCurrentSkin() {

return QMUISkinManager.defaultInstance(QDApplication.getContext()).getCurrentSkin();

}

}

1.4、自定义皮肤保存类

当我们切换皮肤后,需要将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值