diff --git a/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java b/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java index 5a66b49..77742bc 100644 --- a/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java +++ b/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java @@ -1,6 +1,11 @@ package kr.sblog.slimbudget; import android.os.Bundle; +import android.view.View; + +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import com.getcapacitor.BridgeActivity; @@ -9,5 +14,17 @@ public class MainActivity extends BridgeActivity { public void onCreate(Bundle savedInstanceState) { registerPlugin(CardNotifPlugin.class); super.onCreate(savedInstanceState); + + // targetSdk 35+ 의 에지투에지 강제 환경에서 웹뷰가 상태바/소프트키(시스템 내비) 뒤로 + // 깔리는 것을 방지한다. 시스템 바 인셋만큼 웹뷰에 패딩을 줘서 콘텐츠(하단 고정 내비 포함)가 + // 항상 안전 영역 안에 오도록 한다. (CSS env(safe-area-*) 가 기기별로 0 을 반환하는 문제 회피) + final View webView = getBridge().getWebView(); + if (webView != null) { + ViewCompat.setOnApplyWindowInsetsListener(webView, (v, insets) -> { + Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(bars.left, bars.top, bars.right, bars.bottom); + return insets; + }); + } } } diff --git a/src/App.vue b/src/App.vue index e3b9508..661ce1e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -6,7 +6,6 @@ import AppSidebar from '@/components/layout/AppSidebar.vue' import AppBottomNav from '@/components/layout/AppBottomNav.vue' import LoginModal from '@/components/LoginModal.vue' import SignupModal from '@/components/SignupModal.vue' -import ChangePasswordModal from '@/components/ChangePasswordModal.vue' import WebOnlyNotice from '@/components/WebOnlyNotice.vue' import { Capacitor } from '@capacitor/core' import { useAuthStore } from '@/stores/auth' @@ -54,7 +53,6 @@ watch(() => route.fullPath, () => ui.closeSidebar()) - @@ -81,6 +79,8 @@ watch(() => route.fullPath, () => ui.closeSidebar()) .layout-body { grid-area: body; padding: 1.5rem 2rem; + /* 하단 고정 내비(56px)+소프트키 인셋만큼 비워 콘텐츠가 가리지 않게 */ + padding-bottom: calc(56px + env(safe-area-inset-bottom, 0) + 1rem); overflow: auto; } @@ -127,6 +127,7 @@ watch(() => route.fullPath, () => ui.closeSidebar()) } .layout-body { padding: 1rem; + padding-bottom: calc(56px + env(safe-area-inset-bottom, 0) + 1rem); } } diff --git a/src/components/layout/AppBottomNav.vue b/src/components/layout/AppBottomNav.vue index 7908b80..b014907 100644 --- a/src/components/layout/AppBottomNav.vue +++ b/src/components/layout/AppBottomNav.vue @@ -30,51 +30,52 @@ function goSettings() {