【问题标题】:Implement "Copy Link Text" feature in the app在应用程序中实现“复制链接文本”功能
【发布时间】:2014-06-12 10:24:31
【问题描述】:

我有显示搜索结果的 Android WebView。使用 contextMenu 和 WebView HitTestResult,我已经成功实现了打开、保存、复制链接 url 等选项列表。
现在,我想实现 复制链接文本功能在谷歌浏览器安卓中应该只复制链接文本(标题)。默认 Android 浏览器中存在类似(不完全)的功能作为“选择文本”选项。
我不希望使用剪贴板复制文本的代码,而是我的主要座右铭是确定 检索链接标题
链接网址可以使用HitTestResult getExtra()方法检索,同样有没有办法检索链接文本(标题)?
我提到了How to get loaded web page title in Android WebView?,但它在网页加载后给出标题,而不是在按下链接时给出。

【问题讨论】:

    标签: android google-chrome android-webview


    【解决方案1】:

    很遗憾,您发布的链接是获​​取页面标题的最快方式(您可以参考the second answer,这可能更快)。

    这背后的原因是需要先加载网站,然后才能阅读页面标题。 onReceivedTitle()(链接的第二个答案)的优点是它不会等到整个页面加载完毕。它一直等到加载足够的内容以从文档中检索标题。它还会在每次页面标题更改(由于 JavaScript 或其他原因)时通知您。


    编辑:
    chrome 对 复制链接文本 的作用是复制链接的文本,如下所示:
    <a href="linkUrl">Linktext</a>
    

    这很难通过 webview 实现,因为您需要访问网页的 html 内容。有一些解决方法(请参阅here)。

    这两个 API(selectTextcopySelection)正在等待 API 委员会批准,它们可以帮助您执行此操作,但目前不可用。

    没有明确的官方方式来执行此操作。

    【讨论】:

    • 您对 android chrome 浏览器 如何实现 复制链接文本 功能(不加载页面)作为上下文菜单选项有任何见解吗?搜索结果?此外,4.0 中的Android 默认浏览器 也实现了与Select text 选项类似的功能。我查看了源代码并找到了一些方法 webview.selectText() 但我无法将其联系起来。 grepcode.com/file/repository.grepcode.com/java/ext/…
    • 感谢您的努力。我已经尝试在 Android 4.4 的代码中使用 WebView emulateShiftHeld 但无济于事。正如你所说这很难通过webview实现,因为你需要访问网页的html内容,chrome浏览器是否将LinkText从html发送到使用桥接的 Android 代码?
    • 您为待处理的 selectTextcopySelection 方法发布的链接来自 API 级别 15,即 4.0.1。如果您查看 API 19 中的 android.webkit.WebView,您会发现这两种方法都不再列出,这意味着它们没有通过 API 委员会的批准流程。总的来说,它没有任何改变,只是想你可能想知道这些方法永远不会出现。
    【解决方案2】:

    要复制文本试试这个:-

    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
                    android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                    clipboard.setText(mPostCode);
                    Toast.makeText(getApplicationContext(), "Your code is copied.", Toast.LENGTH_SHORT).show();
                } else {
                    android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                    android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", mPostCode);
                            clipboard.setPrimaryClip(clip);
                }
    

    【讨论】:

    • 这里的“mPostCode”是什么?实际上我必须确定用户按下的链接文本可以用作mPostCode。
    • 这是textView的名称,你想从哪里复制文本,或者如果你想你也可以在这里使用编辑框。
    • 其实我需要确定链接的文字(标题)。假设,我在网络结果中显示了一个链接 quertytest.html(标题为 Querty)。为此,我必须以某种方式检索标题 Querty,然后可以将其进一步用作 mPostCode。所以主要问题是如何获得那个 title ?请查看 android chrome 浏览器中“复制链接文本”选项的行为。我想要那个的精确复制品。
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 2018-10-10
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多