在Android中覆盖文本选择(在WebView中)的默认上下文操作栏
我想覆盖现有的文本选择默认上下文操作栏(CAB)。我的意思是,当在webview上选择一些文本时,我想用我自己的按钮显示我自己的CAB。我尝试使用Android文档实现CAB。OnLongClickListener不会捕获web视图中的文本选择事件。捕获文本选择的事件是什么?是否可以隐藏默认CAB并在文本选择时显示我的CAB在Android中覆盖文本选择(在WebView中)的默认上下文操作栏,android,android-webview,contextual-action-bar,Android,Android Webview,Contextual Action Bar,我想覆盖现有的文本选择默认上下文操作栏(CAB)。我的意思是,当在webview上选择一些文本时,我想用我自己的按钮显示我自己的CAB。我尝试使用Android文档实现CAB。OnLongClickListener不会捕获web视图中的文本选择事件。捕获文本选择的事件是什么?是否可以隐藏默认CAB并在文本选择时显示我的CAB childWebView.setOnLongClickListener(new OnLongClickListener() { @Override
childWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
if (mActionMode != null) {
return false;
}
// Start the CAB using the ActionMode.Callback defined above
mActionMode = startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
}
});
正式文件指出: 选择驾驶室动作 您可以决定哪些动作和元素出现在CAB中。使用 中的指导原则来决定要显示哪些项目 在顶层,移动到操作溢出 动态调整驾驶室动作 在大多数情况下,您需要根据需要动态调整驾驶室中的动作 用户将更多项目添加到选择中。适用于某个应用程序的操作 单个选定数据项不一定适用于多个选定数据项 同类数据项 不幸的是,报价中包含的链接链接到了一个部分,该部分也只包含一般信息,而没有实际详细说明。更糟糕的是,它会链接回页面 再看远一点,我从Lars Vogel那里找到了。我引用(我的): 上下文操作模式激活临时
操作栏
,在特定子任务期间覆盖应用程序操作栏
上下文操作模式通常通过选择项目或长时间单击项目来激活
要实现这一点,请在视图或上调用startActionMode(
)方法
你的活动。此方法获取一个ActionMode.Callback
对象,该对象是
负责上下文操作栏的生命周期
您还可以通过
registerForContextMenu(视图)
方法。上下文菜单也被激活
如果用户“长按”视图。onCreateContextMenu()
方法
每次作为上下文菜单激活上下文菜单时调用
使用后会被丢弃。您应该更喜欢上下文操作
模式,而不是上下文菜单的使用
最重要的参考文献提到,我们可以使用registerForContextMenu(view)
创建自己的菜单。我没有重复答案,而是发现其中包含一个关于如何应用自己的CAB的代码示例。注册一个新的上下文菜单应该覆盖任何默认菜单,但我不确定。由于我目前无法对此进行测试,我很高兴听到这是否解决了您的问题。我已经能够解决此问题。我也面临着这个问题,在网上找不到任何解决办法
因此,如果您设置了LongClick侦听器,Webview将完全停止显示所选内容。在深入研究Webview代码之后,我发现它正在调用Webview的方法startRunMode并传递SelectActionCallbackMode类的实例
我只是扩展了Webview类并覆盖了startRunMode方法,如下所示:
public ActionMode startActionMode(ActionMode.Callback callback)
{
actionModeCallback = new CustomizedSelectActionModeCallback();
return super.startActionMode(actionModeCallback);
}
这迫使Webview显示我的回调,而不是显示Webview的默认回调。这确保了选择工作与以前一样顺利,每次选择时都会显示我的驾驶室。唯一需要注意的是,我必须自己编写代码来解雇出租车
在4.1、4.2和4.3设备上测试
希望这能有所帮助。你找到了那个卡卡的解决方案吗?到目前为止有没有解决方案?我也在寻找解决方案。@matiash,创建新标签时请小心。我们已经有了Android上下文操作栏的标签。@Charles,对不起,你说得完全正确。我在重新记录一些问题时发现了它。这就是我停下来的原因。:/但是不是所有的android标签都应该有android-
前缀吗?但是您无法从webview中获取所选文本。此外,在我的实现中,有时使用这种方法在Kitkat webview中会出现内部错误。@Frank您可以通过JavaScript(window.getSelection().toString())获取所选文本。我还没有在KitKat上试过,我会试着看看这个问题。你在4.4上有没有这样的运气?我也做了同样的事情,但是如果选择发生了任何变化,应用程序会在选择动作时崩溃。它在4.4上对我来说非常适合。此外,在4.4中,无需手动关闭驾驶室。它被Android自动隐藏。嘿,谢谢你。通过您的努力,我能够隐藏默认的CAB,但问题是webview上的文本选择(长时间单击)也消失了。您在上面对javascript的使用所做的评论只有在选中文本时才有帮助。在我的情况下,文本不会被选中,只需长按一下即可。谢谢