From e27b20fc930fd5c7d28a45c37dd8214ef0259fd3 Mon Sep 17 00:00:00 2001 From: duanshaofei Date: Sun, 22 Jun 2025 01:50:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=A9=E5=B1=95=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E9=81=BF=E8=AE=A9=E9=94=AE=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: duanshaofei --- .../pattern/menu/menu_layout_algorithm.cpp | 4 +++- .../select_overlay_layout_algorithm.cpp | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/frameworks/core/components_ng/pattern/menu/menu_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/menu/menu_layout_algorithm.cpp index 092beea5cd7..9dceba0b543 100644 --- a/frameworks/core/components_ng/pattern/menu/menu_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/menu/menu_layout_algorithm.cpp @@ -620,7 +620,9 @@ uint32_t MenuLayoutAlgorithm::GetBottomBySafeAreaManager(const RefPtrGetHost()); auto bottom = safeAreaInsets.bottom_.Length(); CHECK_NULL_RETURN(safeAreaManager, 0); - auto keyboardHeight = safeAreaManager->GetKeyboardInset().Length(); + auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); + auto keyboardHeight = keyboardInsert.Length(); if ((menuPattern->IsSelectOverlayExtensionMenu() || menuPattern->IsSelectOverlayRightClickMenu()) && GreatNotEqual(keyboardHeight, 0)) { bottom = keyboardHeight; diff --git a/frameworks/core/components_ng/pattern/select_overlay/select_overlay_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/select_overlay/select_overlay_layout_algorithm.cpp index 0f9fecb5063..600cabe0de0 100644 --- a/frameworks/core/components_ng/pattern/select_overlay/select_overlay_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/select_overlay/select_overlay_layout_algorithm.cpp @@ -66,7 +66,9 @@ void SelectOverlayLayoutAlgorithm::MeasureChild(LayoutWrapper* layoutWrapper) CHECK_NULL_VOID(pipeline); auto safeAreaManager = pipeline->GetSafeAreaManager(); CHECK_NULL_VOID(safeAreaManager); - auto keyboardHeight = safeAreaManager->GetKeyboardInset().Length(); + auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); + auto keyboardHeight = keyboardInsert.Length(); auto safeAreaInsets = safeAreaManager->GetSafeAreaWithoutProcess(); auto top = safeAreaInsets.top_.Length(); auto bottom = GreatNotEqual(keyboardHeight, 0.0) ? 0.0 : safeAreaInsets.bottom_.Length(); @@ -165,6 +167,7 @@ OffsetF SelectOverlayLayoutAlgorithm::CalculateCustomMenuByMouseOffset(LayoutWra auto safeAreaManager = pipeline->GetSafeAreaManager(); CHECK_NULL_RETURN(safeAreaManager, menuOffset); auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); auto keyboardY = maxHeight - keyboardInsert.Length(); uint32_t top = safeAreaManager->GetSystemSafeArea().top_.Length(); if (GreatNotEqual(menuOffset.GetY() + menuSize.Height(), keyboardY)) { @@ -521,8 +524,7 @@ OffsetF SelectOverlayLayoutAlgorithm::AdjustSelectMenuOffset( auto safeAreaBottom = safeAreaManager->GetSafeAreaWithoutProcess().bottom_.start; safeAreaBottom = GreatNotEqual(safeAreaBottom, 0.0f) ? safeAreaBottom : pipeline->GetRootRect().Bottom(); auto keyboardInsert = safeAreaManager->GetKeyboardInset(); - keyboardInsert = - GreatNotEqual(keyboardInsert.Length(), 0.0f) ? keyboardInsert : safeAreaManager->GetKeyboardWebInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); auto avoidKeyboardPosition = keyboardInsert.start - defaultPositionY - menuRect.Height(); avoidKeyboardPosition = GreatNotEqual(avoidKeyboardPosition, 0.0f) ? avoidKeyboardPosition : 0.0f; auto shouldAvoidKeyboard = GreatNotEqual(keyboardInsert.Length(), 0.0f) && @@ -573,6 +575,7 @@ void SelectOverlayLayoutAlgorithm::AdjustMenuOffsetAtSingleHandleBottom(const Re auto safeAreaManager = pipeline->GetSafeAreaManager(); CHECK_NULL_VOID(safeAreaManager); auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); auto shouldAvoidKeyboard = GreatNotEqual(keyboardInsert.Length(), 0.0f) && GreatNotEqual(menuOffset.GetY() + menuRect.Height(), keyboardInsert.start); if (shouldAvoidKeyboard) { @@ -597,6 +600,7 @@ OffsetF SelectOverlayLayoutAlgorithm::AdjustSelectMenuOffsetWhenHandlesUnshown(c return menuOffset; } auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); auto shouldAvoidKeyboard = GreatNotEqual(keyboardInsert.Length(), 0.0f) && GreatNotEqual(menuRect.Bottom(), keyboardInsert.start); auto isBottomTouchKeyboard = GreatNotEqual(keyboardInsert.Length(), 0.0f) && @@ -668,6 +672,7 @@ OffsetF SelectOverlayLayoutAlgorithm::ComputeExtensionMenuPosition(LayoutWrapper auto safeAreaManager = pipeline->GetSafeAreaManager(); CHECK_NULL_RETURN(safeAreaManager, false); auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); return GreatNotEqual(keyboardInsert.Length(), 0.0f) && GreatNotEqual(extensionBottom, keyboardInsert.start); }; if (GreatNotEqual(extensionBottom, extensionLayoutConstraintMaxSize.Height()) || isCoveredBySoftKeyBoard()) { @@ -700,6 +705,7 @@ OffsetF SelectOverlayLayoutAlgorithm::NewMenuAvoidStrategy( CHECK_NULL_RETURN(safeAreaManager, OffsetF()); auto topArea = safeAreaManager->GetSystemSafeArea().top_.Length(); auto keyboardInsert = safeAreaManager->GetKeyboardInset(); + keyboardInsert = safeAreaManager->GetKeyboardWebInset().Combine(keyboardInsert); float positionX = (selectArea.Left() + selectArea.Right() - menuWidth) / 2.0f; auto hasKeyboard = GreatNotEqual(keyboardInsert.Length(), 0.0f); auto downHandle = info_->handleReverse ? info_->firstHandle : info_->secondHandle; -- Gitee