From d5482852ef65466918a295c436aa1c4026c0390b Mon Sep 17 00:00:00 2001 From: Hermes Date: Mon, 20 Apr 2026 18:33:49 +0800 Subject: [PATCH] fix(icon): \u53bb\u6389\u6807\u7b7e\u5206\u7c7b\uff0c\u4fee\u590d\u989c\u8272 undefined \u5bfc\u81f4\u7684\u6e32\u67d3\u5d29\u6e83 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit \u95ee\u9898: 1. \u6807\u7b7e\u5206\u7c7b UI \u5360\u7528\u7a7a\u95f4\u4e14\u53ef\u80fd\u5bfc\u81f4\u95ed\u5305\u95ee\u9898 2. self.withAlpha(subTextColor, 0.1) \u8fd4\u56de undefined\uff0c\u5bfc\u81f4 GradientDrawable.setColor \u62a5\u9519 \u4fee\u590d: 1. \u5b8c\u5168\u53bb\u6389\u6807\u7b7e\u5206\u7c7b\u548c\u5206\u9875\u680f 2. \u4e3a\u6240\u6709\u989c\u8272\u53d8\u91cf\u6dfb\u52a0\u5b89\u5168\u9ed8\u8ba4\u503c 3. \u5c06 createRippleDrawable \u6539\u56de createRoundDrawable\n4. \u4f7f\u7528 try-catch + \u9ed8\u8ba4\u503c\u4fdd\u62a4\u6240\u6709 withAlpha \u8c03\u7528 --- code/th_14_panels.js | 133 ++++++++++++------------------------------- 1 file changed, 35 insertions(+), 98 deletions(-) diff --git a/code/th_14_panels.js b/code/th_14_panels.js index b14ef26..a690c3c 100644 --- a/code/th_14_panels.js +++ b/code/th_14_panels.js @@ -3885,102 +3885,31 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { } var popupResult = self.showPopupOverlay({ - title: "选择 ShortX 图标", + title: "\u9009\u62e9 ShortX \u56fe\u6807", onDismiss: onDismiss, builder: function(content, closePopup) { + // \u5b89\u5168\u83b7\u53d6\u989c\u8272\uff0c\u907f\u514d undefined + var safeSubTextColor = subTextColor || 0xFF5F6368; + var safeTextColor = textColor || 0xFF202124; + var safePrimary = C.primary || 0xFF006C5F; + var safeCard = C.card || 0xFFFFFFFF; + var searchEt = new android.widget.EditText(context); searchEt.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 13); - searchEt.setTextColor(textColor); - try { searchEt.setHintTextColor(subTextColor); } catch(e) {} - searchEt.setHint("搜索图标名,如 share / home / save"); + searchEt.setTextColor(safeTextColor); + try { searchEt.setHintTextColor(safeSubTextColor); } catch(e) {} + searchEt.setHint("\u641c\u7d22\u56fe\u6807\u540d\uff0c\u5982 share / home / save"); searchEt.setSingleLine(true); searchEt.setPadding(self.dp(10), self.dp(8), self.dp(10), self.dp(8)); searchEt.setBackground(self.ui.createStrokeDrawable(isDark ? self.ui.colors.inputBgDark : self.ui.colors.inputBgLight, isDark ? self.ui.colors.dividerDark : self.ui.colors.dividerLight, self.dp(1), self.dp(10))); content.addView(searchEt); - var tabsScroll = new android.widget.HorizontalScrollView(context); - tabsScroll.setHorizontalScrollBarEnabled(false); - var tabsRow = new android.widget.LinearLayout(context); - tabsRow.setOrientation(android.widget.LinearLayout.HORIZONTAL); - tabsRow.setPadding(self.dp(8), self.dp(8), self.dp(8), self.dp(8)); - tabsScroll.addView(tabsRow); - content.addView(tabsScroll); - - var tabButtons = {}; - var ti; - for (ti = 0; ti < tabDefs.length; ti++) { - (function(def) { - var btn = new android.widget.TextView(context); - btn.setText(String(def.label)); - btn.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); - btn.setPadding(self.dp(12), self.dp(6), self.dp(12), self.dp(6)); - var btnLp = new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); - btnLp.setMargins(0, 0, self.dp(6), 0); - btn.setLayoutParams(btnLp); - btn.setClickable(true); - btn.setOnClickListener(new android.view.View.OnClickListener({ - onClick: function() { - self.touchActivity(); - popupState.activeTab = def.key; - popupState.currentPage = 0; - refreshTabs(); - renderGrid(); - } - })); - tabsRow.addView(btn); - tabButtons[def.key] = btn; - })(tabDefs[ti]); - } - - function refreshTabs() { - var k; - for (k in tabButtons) { - if (!tabButtons.hasOwnProperty(k)) continue; - var btn = tabButtons[k]; - var active = popupState.activeTab === k; - btn.setTextColor(active ? C.primary : subTextColor); - try { - btn.setBackground(active ? self.ui.createRoundDrawable(self.withAlpha(C.primary, 0.15), self.dp(16)) : null); - } catch(e) {} - } - } - refreshTabs(); - var statusTv = new android.widget.TextView(context); - statusTv.setTextColor(subTextColor); + statusTv.setTextColor(safeSubTextColor); statusTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 11); - statusTv.setPadding(self.dp(8), 0, self.dp(8), self.dp(6)); + statusTv.setPadding(self.dp(8), self.dp(4), self.dp(8), self.dp(4)); content.addView(statusTv); - var pageBar = new android.widget.LinearLayout(context); - pageBar.setOrientation(android.widget.LinearLayout.HORIZONTAL); - pageBar.setGravity(android.view.Gravity.CENTER_VERTICAL); - pageBar.setPadding(self.dp(8), 0, self.dp(8), self.dp(6)); - - var btnPrev = self.ui.createFlatButton(self, "上一页", subTextColor, function() { - if (popupState.currentPage > 0) { - popupState.currentPage--; - renderGrid(); - } - }); - pageBar.addView(btnPrev); - - var pageInfo = new android.widget.TextView(context); - pageInfo.setTextColor(textColor); - pageInfo.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); - pageInfo.setGravity(android.view.Gravity.CENTER); - pageInfo.setPadding(self.dp(8), 0, self.dp(8), 0); - var pageInfoLp = new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1); - pageInfo.setLayoutParams(pageInfoLp); - pageBar.addView(pageInfo); - - var btnNext = self.ui.createFlatButton(self, "下一页", C.primary, function() { - popupState.currentPage++; - renderGrid(); - }); - pageBar.addView(btnNext); - content.addView(pageBar); - var gridScroll = new android.widget.ScrollView(context); var gridScrollLp = new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, 0); gridScrollLp.weight = 1; @@ -4002,12 +3931,12 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { selectRow.addView(selectPreview); var selectNameTv = new android.widget.TextView(context); - selectNameTv.setTextColor(textColor); + selectNameTv.setTextColor(safeTextColor); selectNameTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 13); selectNameTv.setPadding(self.dp(8), 0, 0, 0); selectRow.addView(selectNameTv); - var selectConfirm = self.ui.createSolidButton(self, "确定", C.primary, android.graphics.Color.WHITE, function() { + var selectConfirm = self.ui.createSolidButton(self, "\u786e\u5b9a", safePrimary, android.graphics.Color.WHITE, function() { self.touchActivity(); if (typeof onSelect === "function") onSelect(selectedName); closePopup(); @@ -4024,7 +3953,7 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { if (dr) selectPreview.setImageDrawable(dr); else selectPreview.setImageDrawable(null); } else { - selectNameTv.setText("未选择"); + selectNameTv.setText("\u672a\u9009\u62e9"); selectPreview.setImageDrawable(null); } } catch(e) {} @@ -4035,16 +3964,14 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { try { grid.removeAllViews(); var q = String(searchEt.getText() || ""); - var matched = filterCatalog(q, popupState.activeTab); + var matched = filterCatalog(q, "all"); - // 调试:直接显示所有匹配图标,不分页 - statusTv.setText("共 " + matched.length + " 个图标"); - pageInfo.setText("-"); + statusTv.setText("\u5171 " + matched.length + " \u4e2a\u56fe\u6807"); if (matched.length === 0) { var emptyTv = new android.widget.TextView(context); - emptyTv.setText("未找到匹配的图标"); - emptyTv.setTextColor(subTextColor); + emptyTv.setText("\u672a\u627e\u5230\u5339\u914d\u7684\u56fe\u6807"); + emptyTv.setTextColor(safeSubTextColor); emptyTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 14); emptyTv.setGravity(android.view.Gravity.CENTER); emptyTv.setPadding(0, self.dp(40), 0, self.dp(40)); @@ -4052,7 +3979,6 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { return; } - // 固定 4 列,不计算动态布局 var cols = 4; grid.setColumnCount(cols); @@ -4064,7 +3990,12 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { cell.setGravity(android.view.Gravity.CENTER_HORIZONTAL); cell.setPadding(self.dp(4), self.dp(6), self.dp(4), self.dp(6)); cell.setClickable(true); - cell.setBackground(self.ui.createRippleDrawable(C.card, self.withAlpha(C.primary, 0.2), self.dp(10))); + + var bgColor = safeCard; + try { + bgColor = self.withAlpha(safeCard, 0.96); + } catch(e) {} + cell.setBackground(self.ui.createRoundDrawable(bgColor, self.dp(10))); var iv = new android.widget.ImageView(context); iv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(self.dp(28), self.dp(28))); @@ -4075,7 +4006,9 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { iv.setImageDrawable(dr); } else { var placeholder = new android.graphics.drawable.GradientDrawable(); - placeholder.setColor(self.withAlpha(subTextColor, 0.1)); + var phColor = 0x1A000000; + try { phColor = self.withAlpha(safeSubTextColor, 0.1); } catch(e) {} + placeholder.setColor(phColor); placeholder.setCornerRadius(self.dp(6)); iv.setBackground(placeholder); } @@ -4092,10 +4025,14 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) { cell.addView(tv); if (selectedName === item.name) { - try { cell.setBackground(self.ui.createRoundDrawable(self.withAlpha(C.primary, 0.2), self.dp(10))); } catch(e) {} - try { tv.setTextColor(C.primary); } catch(e) {} + try { + var selBg = 0x33006C5F; + try { selBg = self.withAlpha(safePrimary, 0.2); } catch(e) {} + cell.setBackground(self.ui.createRoundDrawable(selBg, self.dp(10))); + } catch(e) {} + try { tv.setTextColor(safePrimary); } catch(e) {} } else { - try { tv.setTextColor(subTextColor); } catch(e) {} + try { tv.setTextColor(safeSubTextColor); } catch(e) {} } cell.setOnClickListener(new android.view.View.OnClickListener({