Match ShortX icon picker with settings UI

This commit is contained in:
7015725
2026-05-13 18:21:55 +08:00
parent b9d3dc89da
commit 3d0e57e813
3 changed files with 42 additions and 38 deletions

View File

@@ -4136,8 +4136,18 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
var density = dm.density;
var panelWidth = Math.round(sw * 0.92);
if (panelWidth > self.dp(520)) panelWidth = self.dp(520);
var panelHeight = Math.round(sh * 0.90);
try {
if (self.calculateToolAppLayout) {
var toolLayout = self.calculateToolAppLayout(null);
if (toolLayout && toolLayout.width > 0) panelWidth = toolLayout.width;
if (toolLayout && toolLayout.height > 0) panelHeight = toolLayout.height;
}
} catch(eLayout) { safeLog(null, 'e', "catch " + String(eLayout)); }
if (panelWidth > self.dp(560)) panelWidth = self.dp(560);
if (panelWidth < self.dp(300)) panelWidth = self.dp(300);
if (panelHeight > sh - self.dp(24)) panelHeight = sh - self.dp(24);
if (panelHeight < self.dp(420)) panelHeight = Math.min(sh - self.dp(16), self.dp(420));
var padH = self.dp(14);
var padV = self.dp(12);
@@ -4155,28 +4165,28 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
if (iconSize < self.dp(22)) iconSize = self.dp(22);
if (iconSize > self.dp(32)) iconSize = self.dp(32);
var cellH = self.dp(6) * 2 + iconSize + self.dp(14); // padding + icon + text
var headerH = self.dp(110); // header + search + status + pageBar 约占高度(已去掉 tabs
var maxGridH = Math.round(sh * 0.78);
var rowCount = Math.max(3, Math.floor((maxGridH - headerH) / (cellH + gap)));
var headerH = self.dp(132); // 标题 + 搜索 + 状态 + 分页 + 底部栏
var maxGridH = Math.max(self.dp(220), panelHeight - headerH);
var rowCount = Math.max(3, Math.floor(maxGridH / (cellH + gap)));
var pageSize = colCount * rowCount;
var rootOverlay = new android.widget.FrameLayout(context);
rootOverlay.setBackgroundColor(self.withAlpha(isDark ? 0xFF000000 : 0xFFFFFFFF, 0.55));
try { rootOverlay.setBackgroundColor(android.graphics.Color.parseColor("#33000000")); }
catch(eOverlayBg) { rootOverlay.setBackgroundColor(0x33000000); }
rootOverlay.setClickable(true);
var card = new android.widget.LinearLayout(context);
card.setOrientation(android.widget.LinearLayout.VERTICAL);
card.setPadding(padH, padV, padH, padV);
card.setBackground(self.ui.createRoundDrawable(cardColor, self.dp(16)));
card.setBackground(self.ui.createRoundDrawable(bgColor, self.dp(18)));
try { card.setElevation(self.dp(10)); } catch(eCardElev) { safeLog(null, 'e', "catch " + String(eCardElev)); }
// 使用顶部锚定 + MATCH_PARENT 高度,避免输入法触发窗口 resize 后,居中卡片被上下裁切
// 之前 0.88 屏高 + CENTER 在 IME 弹出时会被压缩窗口居中裁剪,导致标题/搜索框移出屏幕。
// 与 ToolHub 设置页外壳保持同款宽高、圆角、居中方式
var cardLp = new android.widget.FrameLayout.LayoutParams(
panelWidth,
android.widget.FrameLayout.LayoutParams.MATCH_PARENT
panelHeight
);
cardLp.gravity = android.view.Gravity.TOP | android.view.Gravity.CENTER_HORIZONTAL;
try { cardLp.setMargins(0, self.dp(12), 0, self.dp(12)); } catch(eCardMargin) { safeLog(null, 'e', "catch " + String(eCardMargin)); }
cardLp.gravity = android.view.Gravity.CENTER;
card.setLayoutParams(cardLp);
rootOverlay.addView(card);
@@ -4220,8 +4230,10 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
titleTv.setTypeface(null, android.graphics.Typeface.BOLD);
header.addView(titleTv, new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1));
var closeBtn = self.ui.createFlatButton(self, "\u5173\u95ed", C.primary, function() { dismiss(); });
header.addView(closeBtn);
var closeBtn = self.ui.createFlatButton(self, "✕", subTextColor, function() { dismiss(); });
closeBtn.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 18);
closeBtn.setPadding(self.dp(8), 0, self.dp(8), 0);
header.addView(closeBtn, new android.widget.LinearLayout.LayoutParams(self.dp(42), self.dp(38)));
card.addView(header);
// \u641c\u7d22\u6846
@@ -4234,7 +4246,10 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
searchEt.setFocusable(true);
searchEt.setFocusableInTouchMode(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)));
searchEt.setBackground(self.ui.createStrokeDrawable(isDark ? C.inputBgDark : C.inputBgLight, isDark ? C.dividerDark : C.dividerLight, self.dp(1), self.dp(8)));
var searchLp = new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT);
searchLp.setMargins(0, self.dp(8), 0, self.dp(6));
searchEt.setLayoutParams(searchLp);
searchEt.setOnClickListener(new android.view.View.OnClickListener({
onClick: function(v) {
self.touchActivity();
@@ -4305,29 +4320,18 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
selectNameTv.setTextColor(textColor);
selectNameTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 13);
selectNameTv.setPadding(self.dp(8), 0, 0, 0);
selectNameTv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1));
selectRow.addView(selectNameTv);
var selectConfirm = new android.widget.TextView(context);
selectConfirm.setText("\u786e\u5b9a");
selectConfirm.setTextColor(android.graphics.Color.WHITE);
selectConfirm.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 14);
selectConfirm.setTypeface(null, android.graphics.Typeface.BOLD);
selectConfirm.setPadding(self.dp(16), self.dp(8), self.dp(16), self.dp(8));
selectConfirm.setGravity(android.view.Gravity.CENTER);
var pressedColor = self.withAlpha(C.primary, 0.8);
selectConfirm.setBackground(self.ui.createRippleDrawable(C.primary, pressedColor, self.dp(24)));
try { selectConfirm.setElevation(self.dp(2)); } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
selectConfirm.setOnClickListener(new android.view.View.OnClickListener({
onClick: function(v) {
self.touchActivity();
try {
if (typeof onSelect === "function") onSelect(selectedName);
} catch(eSelect) {
safeLog(self.L, 'e', "icon onSelect err=" + String(eSelect));
}
dismiss();
var selectConfirm = self.ui.createSolidButton(self, "\u786e\u5b9a", C.primary, android.graphics.Color.WHITE, function() {
self.touchActivity();
try {
if (typeof onSelect === "function") onSelect(selectedName);
} catch(eSelect) {
safeLog(self.L, 'e', "icon onSelect err=" + String(eSelect));
}
}));
dismiss();
});
selectRow.addView(selectConfirm);
card.addView(selectRow);

View File

@@ -54,8 +54,8 @@
"size": 20386
},
"th_14_panels.js": {
"sha256": "0b14c2526d026240005aa4df2266fb9091bb051286f2c5cc74416e24cd1c74d4",
"size": 239147
"sha256": "2050f77ca25b4a0d890aa583e52b6bec99cf98a6444d7592d921cc142bbd7e3a",
"size": 239323
},
"th_15_extra.js": {
"sha256": "44d19f0012f4182b9f9831d4f5a747b43d3b726f98e0480e6c79f54eeff70a5e",
@@ -68,5 +68,5 @@
},
"keyId": "toolhub-targets-2026-rsa3072",
"schema": 2,
"version": 20260513101000
"version": 20260513102043
}

View File

@@ -1 +1 @@
bxpybqofF+LBb0MRAWyePzHsOJE8dPldxEiz3YMAPw80F6prNiusUF4/6jLT+Xk1E0SyzODSDeMylzD6TwE3GD1F5aYxWDYzbD37/HzOBFZtL1Q0G5n9rWPTr/KNfP5WNFyarw2BRNFcNxIPwLlxFC0Pq4sNe0ksDknyXcl8ZqUbddzK2cSW1N6Vy7kavIbjw+Tnwq7o6Jfae4n/jmZzm5voIp2qc4ypWQkOp2ilDK35nc1ky0IlHnGgsFT2pRl4q3ZpQ0+YrKZbAY6i+iYz9Km0AJ7nxV4Ybhn415oG41yOOTr/95nbQzHj87ts0N3dGXUg+usJjd1jc9XwxU8LYmmaS5FdB8RCTK+m/pxEINgBsHe3jx3NufeM4PJlR37n+Bnme+/UccEAmHVBNAJefY7tVbd+e5PU/IBgoKAde3lmv4q1PB4jENQrpJv65y7H5fWIgtH94UBspg7l2c6HHHGNVKf6boVPGaANxpThpLrKG0hXYMsuUL7bx5Yt9DZN
GWnY0c1SV1cmzelxIrpCa4OcEj1ExwTSxT8N4xzOghClQl32OR8HQOghPoQc+4GcdXBUW8+bVcHDaAqxDYCSVqqwfddCJJfUrQNFchnvFl5GbUJRsVXGxYcWa01ohdWxKj1MkFWckXs/Fu0iIUaUqr3ebq+lP0KDN4NOUUFPZDJKQxRVtIpIuOgXUoYWKP3pa4eIzMes1joDuVzVxqjGEwAHkho1c1MvvP/tyAxsodfpU1hEtYX6HuRteqA7gBo2QfPHL94CQVZmug08DqRf+A60PkVWWvYMsnGnjp7AmQqwy5YJbq1ZrKkeQnRPjFRfEsURcWxdBR6RFL6OLx1HtmazNf9zdotxqO5wdeil00p8zDjcDJcfhJc8Uril274DfFY2PmvZaIjYdWqodw7EFw2D+daMkPRA1gsQ5ca3A1vanL+ZArhZR1BsTxshko6NVHALGfvYoAxZpeQaZZ1jRmfSPCBI6xTZjpJxxj4iPDxRHpoedWSaUCcte3SZUlMW