【问题标题】:How to Replace Webpage Not Available Page To Custom Page? (WEBVIEW)如何将网页不可用页面替换为自定义页面? (网络浏览)
【发布时间】:2019-12-28 16:03:57
【问题描述】:

我想从Webpage not AvailableERR_NAME_NOT_RESOLVED 更改页面

我的页面“没有互联网连接”

如果在线或重新连接互联网,则使用刷新按钮恢复在线,如果没有连接,请留在页面没有互联网连接

看起来像一个页面HTML而不是默认通知页面android

我正在使用Android StudioKotlin

这是MyActivity

class MainActivity : AppCompatActivity() {
    internal var webView: WebView? = null
    private var mCM: String? = null
    private var mUM: ValueCallback<Uri>? = null
    private var mUMA: ValueCallback<Array<Uri?>>? = null

    //select whether you want to upload multiple files (set 'true' for yes)
    private val multiple_files = false

    @SuppressLint("SetJavaScriptEnabled", "WrongViewCast")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        webView = findViewById(R.id.ifView) as WebView
        assert(webView != null)
        val webSettings = webView!!.settings
        webSettings.javaScriptEnabled = true
        webSettings.allowFileAccess = true

        if (Build.VERSION.SDK_INT >= 21) {
            webSettings.mixedContentMode = 0
            webView!!.setLayerType(View.LAYER_TYPE_HARDWARE, null)
        }
        else {
            webView!!.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
        }
        webView!!.webViewClient = Callback()
        webView!!.loadUrl("http://xxx.xxx.xxx") //add your test web/page address here
        webView!!.setWebChromeClient(object : WebChromeClient()
}

这是我的代码Callback

inner class Callback : WebViewClient() {
        override fun onReceivedError(view: WebView, errorCode: Int, description: String, failingUrl: String) {
            Toast.makeText(applicationContext, "Failed loading app!", Toast.LENGTH_SHORT).show()
            }
    }

当然,我的应用程序想要在webview 离线时加载离线页面以通知应用程序未连接互联网,并在webview 在线时再次连接到互联网显示在线页面

【问题讨论】:

  • 我可以在Callback webview 中查看代码吗?
  • 等一下,我会编辑我的任务
  • 好吧等我..

标签: javascript android html kotlin webview


【解决方案1】:

将默认 WebChromeClient 替换为您的自定义 CustomWebviewClient,如下所示

webView!!.setWebViewClient(object : CustomWebviewClient()

然后创建这个自定义 WebViewClient

    inner class CustomWebviewClient : WebViewClient() {

    override fun onPageStarted(view: WebView, url: String, favicon: Bitmap) {
        super.onPageStarted(view, url, favicon)
    }

    override fun onPageFinished(view: WebView, url: String) {
        super.onPageFinished(view, url)
    }

    override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
        super.onReceivedError(view, request, error)

        if (noInternetConnection()) {
            loadNoInternetErrorView()
        } else {
            loadErrorMessageView()
        }
    }
}

当您的 WebView 无法加载页面时,它会调用 onReceivedError 回调,您可以显示错误布局。对于错误视图,您可以使用初始可见性 View.GONE 在布局中创建错误布局,并在发生错误时使其可见。

XML 文件的更改

<WebView 
   android:id="@+id/webView"
   android:layout_width="match_parent"
   android:layout_height="match_parent"/> 

<LinearLayout
   android:id="@+id/error_screen"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">

  <Textview 
    android:id="@+id/error_msg" />
  ................
  <ImageView
    android:id=:"@+id/error_icon/>
  //error view


</LinearLayout>

loadErrorMessageView 你可以这样做

loadErrorMessageView() {
 webview.setVisibility(View.GONE);
 error_screen.setVisibility(View.VISIBLE);
 error_msg.setText("Some error Occurred");
}

对于 NoInternet 案例,您也可以这样做,也许您可​​以显示“没有互联网消息”而不是“发生一些错误”,希望这可以消除您的疑问

【讨论】:

  • 以及在何处包含代码或调用自定义页面 HTML 以查看我的布局自定义错误。并且布局必须是布局 android 或页面 HTML(在文件夹资产中)?
  • layout 我的意思是你将有一个全屏的 webview 权利。除了该 webview 在 XML 布局中创建一个全屏错误页面,初始可见性消失并且 webview 可见,但是当发生错误时将 webview 可见性更改为消失并且错误可见。
  • 是的,但是要调用“错误页面”,我必须在代码的哪个位置调用代码?因为我是android的新手并尝试学习:D
  • 我想在这里调用页面 "loadErrorMessageView("xx.xx.xx/errorpage.html") ?
  • 是这样的吗? "loadErrorMessageView("xx.xx.xx/errorpage.html")" 我在 "()" loadErrorMessageView 中输入页面 HTML ?
猜你喜欢
  • 2021-12-11
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多