NestedScrollView 内带有锚点的 Webview

2024-01-02

我有一个 NestedScrollView ,里面有一个 WebView 。 WebView 包含一个带有锚点的 HTML 文件,这些文件链接到同一文件但不同的位置(想象一下“菜单”和“内容”容器。当您单击菜单项时,“内容”中的相应部分应该出现在屏幕上) 。

<android.support.v4.widget.NestedScrollView 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:id="@+id/svNested"
    android:layout_height="match_parent"
    tools:showIn="@layout/activity_single"
    android:background="@color/colorPrimary">

        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

</android.support.v4.widget.NestedScrollView>

加载数据中:

webView?.loadDataWithBaseURL(null, htmlContent, "text/html", "UTF-8", null)

问题是这些锚点无法按预期工作。


我通过使用 Javascript 计算锚点的位置来工作WebView然后以编程方式滚动NestedScrollView通过调用自定义 URL 并使用WebViewClient。以下是一些片段(我只垂直滚动,但您可以轻松地将其扩展为水平工作):

在您的 Activity 或 Fragment 中(其中NestedScrollView and WebView被引用):

webView.webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
            if(url.startsWith("scrollto")) {
                val offset = url.replace("scrollto://", "");
                val offsetInt = MapUtils.getDensityIndependentPixels(offset.toFloat(), requireContext()).toInt()
                (webView.parent as NestedScrollView).scrollTo(0, offsetInt)
               return true
            }
            return false
        }
    }

//We need this, because the measured pixels in the WebView don't use density of the screen
fun getDensityIndependentPixels(pixels: Float, context: Context): Float {
    return TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        pixels,
        context.resources.displayMetrics
    )
}

然后在你的Javascript中(或者<script>- HTML 中的标签):

function getOffset(el) {
    const rect = el.getBoundingClientRect();
    return {
        top: rect.top + window.pageYOffset,
        left: rect.left + window.pageXOffset
    };
}
                    
function makeItScroll(id) {
     var element = document.getElementById(id)
     var offsetTop = getOffset(element).top
     window.location = "scrollto://"+offsetTop
}

最后在 HTML 中使用它,如下所示:

div您想要滚动到:<div id="here">...</div>

a滚动到那里:<a href="javascript:makeItScroll('here');">...</a>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NestedScrollView 内带有锚点的 Webview 的相关文章

随机推荐

  • 动态更改视频使 play() 请求被新的加载请求中断

    动态更改视频时 我在服务器控制台下收到以下错误 index 71 Uncaught in promise DOMException The play request was interrupted by a new load request
  • 在Python中,如何从点分json文件生成嵌套字典?

    我有一个 json 文件 例如 a 0 7615894039735099 a b 0 7152317880794702 a c 0 026490066225165563 a b d 0 0001 f 0 002 f g 0 00003 h
  • 使用CSS限制响应式图像的高度

    我的最终目标是拥有液体 img 仅使用 css 不会扩展超过父 祖父元素的显式设置高度 目前我正在用正常的 max width 100 height auto 流体图像和 javascript 通过从 img 标签读取高度 宽度属性 计算长
  • EditorFor 用于字符串列表

    我希望用户输入 5 个字符串 问题的可能答案 所以我的问题视图模型中有这些元素 private IEnumerable
  • 在鞋子中,如何将堆栈停靠在窗口底部?

    在鞋子中 我如何将堆栈停靠在窗口底部 例如我有以下代码片段 Shoe app do stack height gt 100 do background red end stack height gt 100 do background bl
  • 如何将 Automapper 与 Autofac 结合使用

    我已经升级到最新版本的 AutoMapper 9 0 并将静态配置更改为 public static IMapper RegisterAutoMapper var config new MapperConfiguration cfg gt
  • 如何使用 HTML 和 CSS 作为 Java 应用程序 GUI?

    我想设计具有干净 GUI 的新 Git 客户端 是否可以在 java 应用程序中使用 HTML CSS 和 JavaScript 的强大功能 我想使用 Java JGit 作为模型 Java 作为控制器 HTML CSS JavaScrip
  • 将标准输出流式传输到网页

    这看起来应该是一件非常简单的事情 不幸的是 Web 开发从来都不是我的强项 我有很多脚本 我想从网页启动它们并查看页面上的实时标准输出文本 有些脚本需要很长时间才能运行 因此正常的单一响应不够好 我已经开始工作了 据我所知 我的选择是 st
  • .DrawImage 具有不透明度?

    g DrawImage 是的 在我的图片框中画一个图像 是否可以给它一个不透明属性 我一直在查看 DrawImage 的其他版本 但找不到这样的东西 您必须使用 ColorMatrix 来混合图像 这是我不久前编写的一个 C 控件 它向您展
  • 哪些小部件约束对于 Grails 域类有效?

    你能告诉我有效值的列表吗小部件约束 http grails org doc 2 0 x ref Constraints widget html下面 一些小部件 例如 static constraints someField widget s
  • Visual Studio 增量构建:XML 文档文件创建得太晚

    我有一个 Visual Studio 2005 的 DLL 项目 它打开了 XML 文档文件 每当我进行增量构建时 在构建后事件执行期间 输出目录中没有 XML 文档文件 如果我在构建后事件期间暂停构建 使用来自GnuWin32 CoreU
  • 使用单个 NSMutableArray 填充 UITableView 部分表

    抱歉再次询问带有完整描述的问题 我有 resultsArray 其中包含从服务器获取的标题描述等 但问题是我想分节显示此数据 假设有来自数组的三个部分 那么如何使用单个 resultArray 填充每个部分中的数据 NSString tab
  • isset() 的 PHP 简写? [复制]

    这个问题在这里已经有答案了 如果 PHP 中不存在某个变量 是否有一种快捷方式将其分配给该变量 if isset var var 我想做类似的事情 var var PHP 7 更新 谢谢震惊狂野 https stackoverflow co
  • 可以使用 Firebase RemoteConfig 来存储 API 密钥吗?

    注意 澄清一下 这不是 Firebase API 密钥 这可能更像是一个令牌 客户端应用程序拥有并由服务器端点验证的东西 我们正在努力更好地保护 API 密钥 想想用于验证端点客户端的令牌 这一切都将在我们的内部网络上 但我们仍然希望确保只
  • golang 中的函数与 switch 的表

    我正在用 go 编写一个简单的模拟器 我应该吗 还是应该回到 c 不管怎样 我正在获取指令并对其进行解码 此时我有一个像 0x81 这样的字节 我必须执行正确的函数 我应该有这样的东西吗 func sys cpu eval switch o
  • iOS 的自动布局可以重新排列 UI 小部件吗

    我有一个应用程序 它具有不同的纵向和横向用户界面 我听说过有关自动布局的精彩内容 但在我所有的阅读中 它似乎可以处理简单的情况 其中 UI 小部件可以简单地调整大小和重新定位 在我的 UI 中 UI 小部件移动 在这种情况下 我应该尝试让自
  • 哪里可以下载mysql jdbc jar? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我安装并尝试使用 jasper reports studio 当您尝试为报告创建数据源时遇到的第一堵墙
  • 将下拉值传递给静态方法后面的代码

    我试图在自动完成方法后面的代码中使用语言选择值 我尝试使用隐藏字段 但这不起作用 ajax 也不适合我 这是我的 html 下拉菜单 div class row div
  • ViewContext 未接收来自 newBackgroundContext() 的更新

    堆栈溢出中已经有类似的问题 但它对我不起作用 我的应用程序中有一个用例 我必须观察数据库更改才能执行某些操作 接收我订阅的更新NSManagedObjectContextObjectsDidChange通知 针对 ViewContext 并
  • NestedScrollView 内带有锚点的 Webview

    我有一个 NestedScrollView 里面有一个 WebView WebView 包含一个带有锚点的 HTML 文件 这些文件链接到同一文件但不同的位置 想象一下 菜单 和 内容 容器 当您单击菜单项时 内容 中的相应部分应该出现在屏