如何将网页不可用页面替换为自定义页面? (网络浏览)
Posted
技术标签:
【中文标题】如何将网页不可用页面替换为自定义页面? (网络浏览)【英文标题】:How to Replace Webpage Not Available Page To Custom Page? (WEBVIEW) 【发布时间】:2019-12-28 16:03:57 【问题描述】:我想从Webpage not Available
或ERR_NAME_NOT_RESOLVED
更改页面
到我的页面“没有互联网连接”?
如果在线或重新连接互联网,则使用刷新按钮恢复在线,如果没有连接,请留在页面没有互联网连接。
我正在使用Android Studio
和Kotlin
这是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 获取为自定义的值