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
|
android.useAndroidX=true
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
android.nonTransitiveRClass=true
|
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.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.rememberSaveable
|
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalClipboardManager
|
import androidx.compose.ui.platform.LocalClipboardManager
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import android.content.pm.PackageManager
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.util.Log
|
import android.view.ViewGroup
|
||||||
import android.webkit.JavascriptInterface
|
import android.webkit.JavascriptInterface
|
||||||
import android.webkit.PermissionRequest
|
import android.webkit.PermissionRequest
|
||||||
import android.webkit.ValueCallback
|
import android.webkit.ValueCallback
|
||||||
@ -14,6 +14,7 @@ import android.webkit.WebChromeClient
|
|||||||
import android.webkit.WebResourceRequest
|
import android.webkit.WebResourceRequest
|
||||||
import android.webkit.WebViewClient
|
import android.webkit.WebViewClient
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
|
import android.widget.FrameLayout
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@ -201,7 +202,7 @@ fun XWebViewView(
|
|||||||
AndroidView(
|
AndroidView(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
factory = { ctx ->
|
factory = { ctx ->
|
||||||
WebView(ctx).apply {
|
val wv = WebView(ctx).apply {
|
||||||
settings.javaScriptEnabled = true
|
settings.javaScriptEnabled = true
|
||||||
settings.domStorageEnabled = true
|
settings.domStorageEnabled = true
|
||||||
settings.useWideViewPort = true
|
settings.useWideViewPort = true
|
||||||
@ -279,12 +280,21 @@ fun XWebViewView(
|
|||||||
if (config.url.isNotBlank()) {
|
if (config.url.isNotBlank()) {
|
||||||
loadUrl(config.url)
|
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 ->
|
update = { container ->
|
||||||
if (view.url.isNullOrBlank() && config.url.isNotBlank()) {
|
val wv = (container as? FrameLayout)?.getChildAt(0) as? WebView ?: return@AndroidView
|
||||||
view.loadUrl(config.url)
|
if (wv.url.isNullOrBlank() && config.url.isNotBlank()) {
|
||||||
|
wv.loadUrl(config.url)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户