From 0fdfc048e7a08bd07476834413c33e7a3fe751b2 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Mon, 11 May 2026 18:58:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor(webview):=20=E9=87=8D=E6=9E=84WebView?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将rememberSaveable导入路径修正到saveable包下 - 移除未使用的Log导入并添加ViewGroup导入 - 添加FrameLayout用于WebView容器包装 - 使用FrameLayout作为WebView的父容器以改善布局控制 - 更新AndroidView的factory和update回调中的WebView引用方式 - 通过容器视图统一管理WebView生命周期和布局参数 - 更新发布版本号从0.4.9到0.4.10 --- gradle.properties | 2 +- .../sdk/sample/ui/webview/WebViewScreen.kt | 2 +- .../java/com/xuqm/sdk/webview/XWebViewView.kt | 22 ++++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index ce5f709..5d1d788 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 android.useAndroidX=true kotlin.code.style=official android.nonTransitiveRClass=true -PUBLISH_VERSION=0.4.9 +PUBLISH_VERSION=0.4.10 diff --git a/sample-app/src/main/java/com/xuqm/sdk/sample/ui/webview/WebViewScreen.kt b/sample-app/src/main/java/com/xuqm/sdk/sample/ui/webview/WebViewScreen.kt index b12c9b5..423a877 100644 --- a/sample-app/src/main/java/com/xuqm/sdk/sample/ui/webview/WebViewScreen.kt +++ b/sample-app/src/main/java/com/xuqm/sdk/sample/ui/webview/WebViewScreen.kt @@ -17,8 +17,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.rememberSaveable import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalClipboardManager diff --git a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt index cbb9809..46ed28d 100644 --- a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt +++ b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt @@ -6,7 +6,7 @@ import android.content.pm.PackageManager import android.net.Uri import android.os.Handler import android.os.Looper -import android.util.Log +import android.view.ViewGroup import android.webkit.JavascriptInterface import android.webkit.PermissionRequest import android.webkit.ValueCallback @@ -14,6 +14,7 @@ import android.webkit.WebChromeClient import android.webkit.WebResourceRequest import android.webkit.WebViewClient import android.webkit.WebView +import android.widget.FrameLayout import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.Composable @@ -201,7 +202,7 @@ fun XWebViewView( AndroidView( modifier = modifier, factory = { ctx -> - WebView(ctx).apply { + val wv = WebView(ctx).apply { settings.javaScriptEnabled = true settings.domStorageEnabled = true settings.useWideViewPort = true @@ -279,12 +280,21 @@ fun XWebViewView( if (config.url.isNotBlank()) { loadUrl(config.url) } - webView = this } + webView = wv + + val container = FrameLayout(ctx) + container.addView(wv, FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + )) + + container }, - update = { view -> - if (view.url.isNullOrBlank() && config.url.isNotBlank()) { - view.loadUrl(config.url) + update = { container -> + val wv = (container as? FrameLayout)?.getChildAt(0) as? WebView ?: return@AndroidView + if (wv.url.isNullOrBlank() && config.url.isNotBlank()) { + wv.loadUrl(config.url) } }, )