用Kotlin写一个WebView,在顶部设置操作栏和菜单项,在WebView内加载网页而不是跳转浏览器,设置允许跳转到其他应用授权登录的代码
时间: 2023-06-14 07:08:10 浏览: 202
学习通过Kotlin语言来简单地开发android应用.
以下是一个简单的示例代码,用Kotlin编写一个带有操作栏和菜单项的WebView,并在WebView内加载网页:
```kotlin
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_webview.*
class WebViewActivity : AppCompatActivity() {
private var currentUrl: String? = null
companion object {
private const val EXTRA_URL = "EXTRA_URL"
fun start(context: Context, url: String) {
val intent = Intent(context, WebViewActivity::class.java)
intent.putExtra(EXTRA_URL, url)
context.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_webview)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
view?.loadUrl(url)
return true
}
}
webView.settings.javaScriptEnabled = true
currentUrl = intent.getStringExtra(EXTRA_URL)
currentUrl?.let { webView.loadUrl(it) }
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_webview, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
onBackPressed()
return true
}
R.id.menu_refresh -> {
currentUrl?.let { webView.loadUrl(it) }
return true
}
R.id.menu_browser -> {
currentUrl?.let { url ->
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)
}
return true
}
}
return super.onOptionsItemSelected(item)
}
@SuppressLint("SetJavaScriptEnabled")
override fun onResume() {
super.onResume()
webView.settings.javaScriptEnabled = true
}
override fun onPause() {
super.onPause()
webView.settings.javaScriptEnabled = false
}
}
```
在这个示例中,我们使用了 `WebView` 和 `WebViewClient` 来在 WebView 内加载网页。我们还使用了 `Toolbar` 和 `Menu` 来添加操作栏和菜单项。
为了允许跳转到其他应用程序进行授权登录,我们需要添加以下代码:
```kotlin
override fun onResume() {
super.onResume()
webView.settings.javaScriptEnabled = true
}
override fun onPause() {
super.onPause()
webView.settings.javaScriptEnabled = false
}
```
这将在 `WebView` 活动恢复时启用 JavaScript,并在暂停时禁用它。这是为了防止恶意网站在后台运行 JavaScript 代码,可能会导致安全问题。
阅读全文