已知difficult可以在WebView中获取所选文本,因为WebView文本选择实际上是由私有类WebTextView处理的。
然而,随着最近发布的Android 4.0 Design guidelines,通过上下文操作栏(CAB)实现这一目标似乎有一线希望。它says:
只要您允许用户通过长按选择数据,请使用CAB。您可以控制CAB的操作内容,以插入您希望用户能够执行的操作。
我误解了这个吗? 有没有办法通过CAB从WebView检索所选文本?
经过长时间点击和文字选择模式开始后,我现在可以检测ActionMode
何时开始并修改原始复制/粘贴Menu
;但是,我无法弄清楚如何实际检索所选文本。
答案 0 :(得分:8)
使用当前的API无法做到这一点。
我已为此提交了功能请求 - 问题24841:WebView应允许应用程序提供自定义上下文操作栏http://code.google.com/p/android/issues/detail?id=24841
基本上,4.0中的WebView已经硬编码了自己的上下文操作栏(CAB)。该CAB具有对WebView的引用,并且通过该引用,它可以获取所选文本。我不确定你是如何检测ActionMode启动和修改菜单的,但是如果你能够完成所有这些操作,那么你就会陷入困境,因为getSelection()目前是包私有的。我将其作为一个单独的问题提交,并将其与上一个问题相关联。
答案 1 :(得分:0)
您可以使用javascript获取所选文本:window.getSelection(),并使用WebView的addJavascriptInterface函数返回结果。
答案 2 :(得分:0)
感谢您的信息,我已经解决了一个难题。 我只想在actionmode中添加一些功能。 以下是我的代码,可能对其他人有帮助。
@Override
public ActionMode onWindowStartingActionMode(Callback callback) {
// TODO Auto-generated method stub
ActionMode mode = super.onWindowStartingActionMode(callback);
mode.getMenuInflater().inflate(R.menu.actions, mode.getMenu());
mode.getMenu().findItem(R.id.action_add).setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
Log.i("", "onMenuItemClick add ");
return false;
}
});
return mode;
}