目標
替換掉webView默認的報錯頁面。效果圖如下:
主要代碼
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initListeners()
initViews()
}
private fun initListeners() {
retryIv.setOnClickListener {
webView.reload()
webView.visibility = View.INVISIBLE
showErrorView(false)
}
}
private fun initViews() {
webView.loadUrl("https://www.baidu.com/")
webView.settings.javaScriptEnabled = true//設置webView屬性,能夠執行Javascript腳本
val webSettings = webView.settings
webSettings.javaScriptEnabled = true //允許加載javascript
webSettings.setSupportZoom(true) //允許縮放
webSettings.builtInZoomControls = true //原網頁基礎上縮放
webSettings.useWideViewPort = true //任意比例縮放
webView.webViewClient = webClient
webView.webChromeClient = webChromeClient
}
private var webClient: WebViewClient = object : WebViewClient() {
//處理網頁加載失敗時
override fun onReceivedError(
view: WebView,
errorCode: Int,
description: String,
failingUrl: String
) {
showErrorView(true) //顯示錯誤頁面
}
}
private var webChromeClient: WebChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, newProgress: Int) {
super.onProgressChanged(view, newProgress)
if (newProgress >= 100) {
view.visibility = View.VISIBLE
}
}
}
private fun showErrorView(isToShow: Boolean) {
errorView.visibility = if (isToShow) View.VISIBLE else View.GONE
}
}