【问题标题】:How to select text from android webview programmatically如何以编程方式从android webview中选择文本
【发布时间】:2016-01-24 17:32:05
【问题描述】:

我有一个用于显示我的大学教学大纲的应用程序,我在其中显示一堆 html 文件,这些文件存储为带有 webview 的活动中的资产。该应用程序仅支持 API 14+ html 文件是纯文本文件。 我现在要做的是提供一个共享按钮,该按钮将复制 web 视图中的所有文本,并提供通过 shareintent 共享它的选项,并将复制的文本作为正文。 我可以通过长按文本并使用全选按钮并复制它然后将其粘贴到我想要的任何位置来在 web 视图中手动执行此操作。这完美地工作。 我只想通过单击按钮来复制此操作

这是我尝试过的代码:

android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
KeyEvent shiftPressEvent = new KeyEvent(0, 0,
        KeyEvent.ACTION_DOWN,
        KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
shiftPressEvent.dispatch(webView);

if(clipboard!=null) {
    String text = clipboard.getText().toString();
    Toast.makeText(SyllabusPage_alternative.this, "select_text_now     " + text, Toast.LENGTH_LONG).show();

    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    String shareBody = text;
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    startActivity(Intent.createChooser(sharingIntent, "Share via"));
}

但这似乎无法正常工作,当我按下按钮时,只有剪贴板的先前内容显示在 toast 和 shareIntent 的正文中。 我只想知道如何做到这一点,选择整个文本,然后以编程方式将其复制到字符串中?或者请告诉我任何其他方法可以解决这个问题

感谢大家提前回复

【问题讨论】:

  • 当您可以从 HTML 资源中复制文本时,为什么还需要从 web 视图中复制文本?
  • 只是一个快速的未响应评论。我认为您的布局设计非常干净和良好。如果您想查找带有 alpha(透明背景)的图标,您可以查询 Google 的主要来源:design.google.com/icons您甚至可以在运行时设置它们的颜色(色调)。
  • 谢谢,我会试试图标的链接。

标签: android android-webview


【解决方案1】:

您可以使用 JavaScriptInterface 从 WebView 运行 Java 代码(在您的 Android 组件中)。

您将创建一个 JavaScript 按钮,该按钮会将信息返回到 Activity/Fragment/Blabla 中的函数。

下面显示的代码取自Boris answer

在你的 webView 中设置一个新的 JavaScriptInterface:

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");

使用方法创建一个类(可选的创建新类)。

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activiy) {
        this.activity = activiy;
    }

    public void shareStuff(String someStuff){
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, someStuff);
        sendIntent.setType("text/plain");
        startActivity(sendIntent);
    }
}

然后是你的教学大纲 HTML:

<button onclick="window.JSInterface.shareStuff('your_selected_text');" >
</button>

查看这些链接了解更多信息。

Call Java function from JavaScript over Android WebView

How to get return value from javascript in webview of android?

以及主要文档中的一些示例。

http://developer.android.com/guide/webapps/webview.html

【讨论】:

  • 最后一点没看懂。 'your_selected_text' 是什么意思。我必须手动将文本放在那里吗?我有超过 500 个 html 文件,用于我的大学提供的不同课程和科目,所以我不能对每个文件都这样做,也不能操纵所有这些文件来添加或删除一些东西。我试着把 onclick="window.JSInterface.shareStuff('your_selected_text');"在我的晶圆厂按钮中,它在晶圆厂按钮点击时不起作用
  • 最后一部分将进入您的 HTML 文件内部,即添加一个带有 JavaScript onClick 函数的按钮。然后使用 JavaScript 检索所选文本相当容易,请查看此链接了解更多信息:stackoverflow.com/questions/5379120/…
  • 非常感谢您的回答。但我无法再次编辑我拥有的所有 500 多个 html 文件。所以我用不同的方法来解决我的问题。我将整个页面转换为图像,然后允许共享。不过还是谢谢你的回答
  • 您可以通过编程方式添加按钮(仅一次)。但是你的新方法也很好。
  • 我的新方法也遇到了问题。捕获的图像不完整,只捕获了教学大纲的第一部分,但没有捕获底部部分。我不知道如何解决这个问题
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
相关资源
最近更新 更多