如何将网页不可用页面替换为自定义页面? (网络浏览)

Posted

技术标签:

【中文标题】如何将网页不可用页面替换为自定义页面? (网络浏览)【英文标题】: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 中查看代码吗? 等一下,我会编辑我的任务 好吧等我.. 【参考方案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_
   android:layout_/> 

<LinearLayout
   android:id="@+id/error_screen"
   android:layout_
   android:layout_>

  <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 ?

以上是关于如何将网页不可用页面替换为自定义页面? (网络浏览)的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET C#中怎么让 httpcontext.current.user.identity.name 获取为自定义的值

web发布新版本,前端页面如何自动刷新

将“默认”页面设为自定义分类归档页面的父页面

如何显示网页的加载过程

手机网页显示不正常

如何将 AOSP 系统 UI 替换为自定义 UI?