fix: 设置页所有 UI 元素统一跟随 SETTINGS_THEME 切换

之前只有 buildSettingsGroupPanelView(分组页)检查了
SETTINGS_THEME,但首页面板 buildSettingsHomePanelView
和入口卡片 createSettingsHomeEntry 直接硬编码
getAnimalIslandTheme(),导致切换到 Monet 后首页仍是
动物岛风。

修复: 提取公共方法 applySettingsTheme(T, isDark, C, cfgTpl),
在三个构建位置统一调用:
- createSettingsHomeEntry (入口卡片:徽章/标题/按钮颜色)
- buildSettingsHomePanelView (设置首页:背景/统计卡/按钮)
- buildSettingsGroupPanelView (分组页:背景/卡片/预览开关)
This commit is contained in:
7015725
2026-05-15 02:29:03 +08:00
parent b79961b08e
commit efdcd3f187
3 changed files with 38 additions and 27 deletions

View File

@@ -1,4 +1,33 @@
// @version 1.0.0
// 根据当前 SETTINGS_THEME 覆盖 TAnimal Island 配色对象),
// 使设置页所有 UI 元素(首页/分组页/入口卡片)统一跟随主题切换。
// 传入 T、isDark、C(this.ui.colors)、cfgTpl(配置源),直接修改 T 的字段。
FloatBallAppWM.prototype.applySettingsTheme = function(T, isDark, C, cfgTpl) {
var settTheme = String((cfgTpl || this.config).SETTINGS_THEME || "animal");
if (settTheme !== "monet") return;
try {
var Color = android.graphics.Color;
var monetBg = isDark ? C.bgDark : C.bgLight;
var monetTxt = isDark ? C.textPriDark : C.textPriLight;
var monetCard = isDark ? C.cardDark : C.cardLight;
var monetSub = isDark ? C.textSecDark : C.textSecLight;
var monetPrimary = C.primary;
var monetOnP = C._monetOnPrimary || (isDark ? Color.parseColor("#062E6F") : Color.WHITE);
T.bg = monetBg;
T.card = monetCard;
T.card2 = monetCard;
T.text = monetTxt;
T.sub = monetSub;
T.primary = monetPrimary;
T.primaryDeep = monetPrimary;
T.primarySoft = isDark ? this.withAlpha(monetPrimary, 0.20) : this.withAlpha(monetPrimary, 0.10);
T.brown = monetSub;
T.stroke = isDark ? this.withAlpha(monetTxt, 0.16) : this.withAlpha(monetTxt, 0.12);
T.onPrimary = monetOnP;
} catch(e) { safeLog(null, 'e', "catch " + String(e)); }
};
FloatBallAppWM.prototype.getSettingsGroupDefs = function() {
return [
{ key: "ball", title: "漂浮气球", desc: "调整气球大小、图标和跟随距离", sections: ["悬浮球"] },
@@ -38,6 +67,8 @@ FloatBallAppWM.prototype.createSettingsHomeEntry = function(parent, title, desc,
var isDark = this.isDarkTheme();
var C = this.ui.colors;
var T = this.getAnimalIslandTheme();
var cfgTpl = this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config;
this.applySettingsTheme(T, isDark, C, cfgTpl);
var cardColor = T.card;
var textColor = T.text;
var subTextColor = T.sub;
@@ -111,6 +142,8 @@ FloatBallAppWM.prototype.buildSettingsHomePanelView = function() {
var isDark = this.isDarkTheme();
var C = this.ui.colors;
var T = this.getAnimalIslandTheme();
var cfgTpl = this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config;
this.applySettingsTheme(T, isDark, C, cfgTpl);
var bgColor = T.bg;
var subTextColor = T.sub;
var panel = this.ui.createStyledPanel(this, 16);
@@ -259,29 +292,7 @@ FloatBallAppWM.prototype.buildSettingsGroupPanelView = function() {
// 设置页主题切换animal默认动物岛风或 monet系统莫奈色
var cfgTpl = this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config;
var settTheme = String(cfgTpl.SETTINGS_THEME || "animal");
if (settTheme === "monet") {
try {
var Color = android.graphics.Color;
var monetBg = isDark ? C.bgDark : C.bgLight;
var monetTxt = isDark ? C.textPriDark : C.textPriLight;
var monetCard = isDark ? C.cardDark : C.cardLight;
var monetSub = isDark ? C.textSecDark : C.textSecLight;
var monetPrimary = C.primary;
var monetOnP = C._monetOnPrimary || (isDark ? Color.parseColor("#062E6F") : Color.WHITE);
T.bg = monetBg;
T.card = monetCard;
T.card2 = monetCard;
T.text = monetTxt;
T.sub = monetSub;
T.primary = monetPrimary;
T.primaryDeep = monetPrimary;
T.primarySoft = isDark ? this.withAlpha(monetPrimary, 0.20) : this.withAlpha(monetPrimary, 0.10);
T.brown = monetSub;
T.stroke = isDark ? this.withAlpha(monetTxt, 0.16) : this.withAlpha(monetTxt, 0.12);
T.onPrimary = monetOnP;
} catch(eM) { safeLog(null, 'e', "catch " + String(eM)); }
}
this.applySettingsTheme(T, isDark, C, cfgTpl);
var bgColor = T.bg;
var cardColor = T.card;

View File

@@ -54,8 +54,8 @@
"size": 20392
},
"th_14_panels.js": {
"sha256": "9e8200cd2b4855484952501aa5e838e0ee57da83251c57ad7a8ca85c0f169e64",
"size": 244802
"sha256": "a998d4d73051d2c9b5be57e570a51fa9cb4ffff1a9c8d5cff6f15a5c717311bb",
"size": 245438
},
"th_15_extra.js": {
"sha256": "b607620f1900c1bd93ccbec8d901d4de53b3d36e9373877f4264442f79b9b956",
@@ -68,5 +68,5 @@
},
"keyId": "toolhub-targets-2026-rsa3072",
"schema": 2,
"version": 20260514182651
"version": 20260514182858
}

View File

@@ -1 +1 @@
CTWxWiKLfuIdWR5aH+sgiWC947wRH4pwSxMikOJ6uazbLqUYPijmC3J5l6QgQXnhV1GBDhTgLi3vseHqybCZ0L2eZFAAN9unxV17kRs5dyy+TUCBA3BWwkWLwHASNN4d6EqO7fTf5LhhcHd87yUKJjhSgTYvjr2Shb+qO0vOgaWUYE6C/H73MO82FcaiyGF3KXcLonWexojrwskwu5SZ8NF8mXIoobfm2Um5m81pDbzDa1s/q0SZzAvPE9a3Yx0Y7xJuxYJW/ssSLq9IvQ8s4eNQOrU7Te9kXFn4b7N5k8RM9YjxSnAQV01wvLOWn3dIqs+iDormLXqyL0HKOrUPxIKB83oUI3yl9Vg2mNrwm2ucNXqrvErQ/NK4b2vmHo6G+dddacSFRIx+jHKTmETfHk0e7+J2iSQKnQx5AsfNR+CP7JKoteZypI6yb+LP0GyYY3M9lkwGtD9kNc4f/YdbVMRdWVwXpnXjBhvmqXZsUV5U6Veb4g+TssH3MhsTpZ27
dnlTNj0xaNuD3ovfDT5K25pIf3pe9cFqkgSVAUPO9NVReyXhJt2GU5S4H1OeayT2QF4GEB2SjsvDCLfmN4RFYrP99yhOdJ66zz1mgI8BNNorjRmR9kqs3REdDrZqUuMD50Nqebr01RrHUnksDIESf7Li9fnsFCpPSco+HEzU8tqkJiBv9en7R5rh7dYuMa1Hz7WVc7jRQsqWgnaPSH7czL5Ffv0R889Sa/PRwUJvWb462rDM0YMrjXJPcTCueX10ycgvvzPKfIBCAkG2MeWSfuL9TbDn+Dbe9am8og7bH3kMCduU7SyV7avVAo8M+x2NP4osVgageMAe8O4HLUXxUeDfAreoPSSHtSCYwd7bP7sjr1RS8s8WxubKUAc1Koqwf82kLar4ODPmLVgCW3U9O7pBNIdsZ3hpj4K+o35+Nn7X0vmeUfwVtNG8nOSQFGMshT60dasmOdefkU8OxdAc9rlS44QK8H/GS+6E7WAONUFYZxncgDh8ibHa7SFz8BKm