Android WebView是一个视图组件, 用于显示应用程序中的网页。它使用WebKit引擎显示网页。 android.webkit.WebView类是AbsoluteLayout类的子类。
WebView的loadUrl()和loadData()方法用于加载和显示网页。要了解有关Android WebView的更多信息, 请访问https://www.srcmini02.com/android-webview-example
有多种方法可以在WebView中加载网页, 例如:
将HTML内容作为字符串加载到类中:
val wedData: String = "<html><body><h1>Hello, srcmini!</h1></body></html>"
val mimeType: String = "text/html"
val utfType: String = "UTF-8"
webView.loadData(wedData, mimeType, utfType)
从应用程序内加载网页(.html, .jsp等)。在这种情况下, 网页将放置在资产目录中。
webView.loadUrl("file:///android_asset/index.html")
将Web URL内的Web URL加载为:
webView.loadUrl("https://www.srcmini02.com/")
Kotlin Android WebView示例
在此示例中, 我们将在WebView组件中加载Web URL并覆盖URL。
目录结构
activity_main.xml
在activity_main.xml文件中添加WebView组件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="example.srcmini02.com.kotlinwebview.MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
AndroidMenifest.xml
在AndroidMenifest.xml文件中, 添加Internet权限以连接网络连接。
<uses-permission android:name="android.permission.INTERNET"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="example.srcmini02.com.kotlinwebview">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.kt
在MainActivity.kt类中添加以下代码。在此类中, 我们使用WebView的loadUrl()方法加载Web URL。
创建一个MyWebViewClient类, 该类扩展了WebViewClient, 该类重写了shouldOverrideUrlLoading()方法。
package example.srcmini02.com.kotlinwebview
import android.app.Activity
import android.os.Build
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.annotation.RequiresApi
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/* val wedData: String = "<html><body><h1>Hello, srcmini!</h1></body></html>"
val mimeType: String = "text/html"
val utfType: String = "UTF-8"
webView.loadData(wedData, mimeType, utfType)*/
/* val myWebUrl: String = "file:///android_asset/index.html"
webView.loadUrl(myWebUrl)*/
webView.webViewClient = MyWebViewClient(this)
webView.loadUrl("https://www.srcmini02.com/")
}
class MyWebViewClient internal constructor(private val activity: Activity) : WebViewClient() {
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
val url: String = request?.url.toString();
view?.loadUrl(url)
return true
}
override fun shouldOverrideUrlLoading(webView: WebView, url: String): Boolean {
webView.loadUrl(url)
return true
}
override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
Toast.makeText(activity, "Got Error! $error", Toast.LENGTH_SHORT).show()
}
}
}
输出:
评论前必须登录!
注册