refactor(webview): 重构WebView组件实现
- 将rememberSaveable导入路径修正到saveable包下 - 移除未使用的Log导入并添加ViewGroup导入 - 添加FrameLayout用于WebView容器包装 - 使用FrameLayout作为WebView的父容器以改善布局控制 - 更新AndroidView的factory和update回调中的WebView引用方式 - 通过容器视图统一管理WebView生命周期和布局参数 - 更新发布版本号从0.4.9到0.4.10
这个提交包含在:
父节点
9e9b41fedb
当前提交
0fdfc048e7
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户