fix(icon): \u53bb\u6389\u6807\u7b7e\u5206\u7c7b\uff0c\u4fee\u590d\u989c\u8272 undefined \u5bfc\u81f4\u7684\u6e32\u67d3\u5d29\u6e83

\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
This commit is contained in:
Hermes
2026-04-20 18:33:49 +08:00
parent d209678b6f
commit d5482852ef

View File

@@ -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({