18034727885
2026-09-02 9851743770909686532d711aa7f318a990a04da0
修复问题
2个文件已修改
44 ■■■■■ 已修改文件
mylibrary/src/main/AndroidManifest.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mylibrary/src/main/java/com/example/mylibrary/WebPayActivity.kt 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mylibrary/src/main/AndroidManifest.xml
@@ -9,6 +9,7 @@
            android:name=".WebPayActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
            android:configChanges="orientation|screenSize|smallestScreenSize|keyboardHidden"
            android:windowSoftInputMode="adjustResize"
            android:exported="false" />
    </application>
mylibrary/src/main/java/com/example/mylibrary/WebPayActivity.kt
@@ -12,7 +12,9 @@
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.WindowInsets
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import android.webkit.CookieManager
import android.webkit.JavascriptInterface
import android.webkit.WebChromeClient
@@ -241,17 +243,30 @@
                // 1. 从 DecorView 移除全屏视图
                val decorView = window.decorView as FrameLayout
                decorView.removeView(customView)
                // 2. 清理状态
                mCustomView = null
                mCustomViewCallback?.onCustomViewHidden()
                mCustomViewCallback = null
                // 3. 恢复系统 UI
                showSystemUI()
                // 2. 彻底清理全屏 Window flag(关键!)
                //    很多人只恢复了 systemUiVisibility,但忘了清除 Window flag
                window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
                // 4. 恢复原始屏幕方向
                // 3. 恢复非全屏的 UI 可见性
                window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
                // 4. 恢复屏幕方向
                requestedOrientation = mOriginalOrientation
                // 5. 关键:重建 IME 关联
                //    先让 WebView 完全失去焦点
                webView.clearFocus()
                // 6. 下一帧再重新获得焦点,触发 IMM 重建 served view
                webView.post {
                    webView.requestFocus()
                }
            }
        }
        webView.webViewClient = object : WebViewClient() {
@@ -289,21 +304,13 @@
                            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            or View.SYSTEM_UI_FLAG_FULLSCREEN
                            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                            or View.SYSTEM_UI_FLAG_IMMERSIVE  // 不再使用 STICKY
                    )
        } else {
            window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
        }
    }
    /**
     * 恢复系统 UI 显示
     */
    private fun showSystemUI() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            window.decorView.systemUiVisibility = mOriginalSystemUiVisibility
        } else {
            window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
            window.setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN
            )
        }
    }