- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个简单的应用程序来重现该问题。我有一个带有相关链接的 html 文件(带有 #
符号)。我正在将文件加载到 Android 的 WebView
中。但我只能通过链接访问一次。返回后,当我点击链接时没有任何反应。
重现步骤:
来源如下:
常见问题解答.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, target-densityDpi=medium-dpi">
<title>Title</title>
</head>
<body>
<h1>FAQ</h1>
<ul>
<li><a href="#Foo">Link 1</a></li>
<li><a href="#Bar">Link 2</a></li>
</ul>
<h1><a name="Foo">Link 1 body</a></h1>
<p>a very very very long text</p>
<h1><a name="Bar">Link 2 body</a></h1>
</body>
</html>
activity_webview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/outer_background">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
常见问题解答.kt
class FaqActivity : AppCompatActivity() {
private lateinit var webView: WebView
@SuppressLint("NewApi")
override fun onCreate(args: Bundle?) {
super.onCreate(args)
setContentView(R.layout.activity_webview)
if (supportActionBar != null) {
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
supportActionBar!!.setTitle(R.string.preference_about_faq)
}
webView = findViewById(R.id.webView)
val sb = StringBuilder()
try {
val inp = resources.openRawResource(R.raw.faq)
parseStream(inp, sb)
} catch (e: Resources.NotFoundException) {
}
webView.visibility = View.INVISIBLE
webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
// removes white screen blinking in the night mode
webView.visibility = View.VISIBLE
}
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
return if (url.startsWith("http")) {
val uri = Uri.parse(url)
val intent = Intent(Intent.ACTION_VIEW, uri)
try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
}
true
} else {
false
}
}
}
webView.loadDataWithBaseURL(null, sb.toString(), "text/html", "UTF-8", null)
}
private fun parseStream(inputStream: InputStream, builder: StringBuilder) {
val NL = System.getProperty("line.separator")
val scanner = Scanner(inputStream, "UTF-8")
try {
while (scanner.hasNextLine()) {
builder.append(scanner.nextLine() + NL)
}
} finally {
scanner.close()
}
}
override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed()
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
// Respond to the action bar's Up/Home button
android.R.id.home -> {
super.onBackPressed()
return true
}
}
return super.onOptionsItemSelected(item)
}
}
源是 Kotlin 文件,但我很确定它不会影响问题。
最佳答案
你可以在onBackPressed()
函数中使用webView.pageUp(true)
,而不是webView.goBack()
这样当您单击设备上的后退按钮,它会滚动到顶部。
关于android - 调用 goBack 后相关链接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57166138/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!