我想覆盖现有的默认上下文操作栏(CAB)以进行文本选择。我的意思是,当我在webview上选择一些文本时,我想用自己的按钮显示我自己的CAB。我尝试使用Android文档实现CAB。 OnLongClickListener不捕获Web视图中的文本选择事件。捕获文本选择的事件是什么?是否可以隐藏默认CAB并在文本选择上显示我的CAB?
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;
}
});
答案 0 :(得分:9)
我能够解决这个问题。我也面临这个问题,在网上找不到任何解决方案。
因此,如果您设置LongClick侦听器,Webview将完全停止显示选择。在深入研究Webview代码之后,我发现它正在调用WebView的方法startRunMode并传递一个SelectActionCallbackMode类的实例。
我只是扩展了Webview类并重写了startRunMode方法,如下所示:
public ActionMode startActionMode(ActionMode.Callback callback)
{
actionModeCallback = new CustomizedSelectActionModeCallback();
return super.startActionMode(actionModeCallback);
}
这迫使Webview显示我的Callback,而不是显示Webview的默认值。这确保了选择像以前一样顺利进行,每次选择时都会显示我的CAB。唯一需要注意的是,我必须自己编写代码来解雇CAB。
在4.1,4.2和4.3设备上测试。
希望这有帮助。
答案 1 :(得分:1)
官方文档Selection | Android Developers指出:
选择CAB操作
您可以决定CAB中显示哪些操作和元素。使用 Action Bar pattern中的指南决定要展示的项目 在顶层,以及移动到动作溢出。
动态调整CAB操作 在大多数情况下,您需要动态调整CAB中的操作 用户向选择中添加更多项目。适用于a的操作 单个选定的数据项不一定适用于多个选定的数据项 同类数据。
不幸的是,报价中包含的链接链接到一个部分,该部分仅保存一般信息而不实际详细说明。更糟糕的是,它链接回Selection | Android Developers页面。
再往前看,我发现了Lars Vogel的this tutorial。我引用(格式化我的):
上下文操作模式会激活在特定子任务期间覆盖应用程序
ActionBar
的临时ActionBar
。通常通过选择项目或通过长按来激活上下文操作模式。
要实现此功能,请在View或on上调用
startActionMode(
)方法 你的活动。这个方法得到一个ActionMode.Callback
对象 负责上下文ActionBar
的生命周期。您还可以通过以下方式将上下文菜单指定给
View
registerForContextMenu(view)
方法。上下文菜单也被激活 如果用户“长按”视图。onCreateContextMenu()
方法 每次激活上下文菜单作为上下文菜单时调用 在使用后被丢弃。您应该更喜欢上下文操作 使用上下文菜单的模式。
最突出的参考提到我们可以使用registerForContextMenu(view)
创建自己的菜单。我没有复制答案,而是this answer J. Pablo Fernández,其中包含有关如何应用自己的CAB的代码示例。注册新的上下文菜单应该覆盖任何默认菜单,但我不确定。由于我目前无法对此进行测试,我很高兴听到这是否解决了您的问题。