覆盖Android中用于文本select(在WebView中)的默认上下文操作栏

我想覆盖现有的默认上下文操作栏(CAB)文本select。 我的意思是,我想用自己的button显示自己的CAB,当在web视图上select一些文本。 我尝试使用Android文档实现CAB。 OnLongClickListener不会捕获Web视图中的文本select事件。 什么是捕获文本select的事件? 是否可以隐藏默认的CAB并在文本select上显示我的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; } }); 

Solutions Collecting From Web of "覆盖Android中用于文本select(在WebView中)的默认上下文操作栏"

我已经能够解决这个问题了。 我也遇到了这个问题,在网上找不到任何解决scheme。

所以,如果你设置了一个LongClick监听器,Webview将不再显示select。 深入研究Webview代码之后,我发现它调用了WebView的方法startRunMode并传递了SelectActionCallbackMode类的一个实例。

我简单地扩展了Webview类,并像这样覆盖了startRunMode方法:

 public ActionMode startActionMode(ActionMode.Callback callback) { actionModeCallback = new CustomizedSelectActionModeCallback(); return super.startActionMode(actionModeCallback); } 

这迫使Webview显示我的callback,而不是显示Webview的默认值。 这确保select工作和以前一样顺利,每次select时都显示我的CAB。 唯一需要注意的是我必须自己写代码才能解散CAB。

testing4.1,4.2和4.3设备。

希望这可以帮助。

官方文档select| Android开发者指出:

selectCAB操作

您可以决定哪些操作和元素出现在CAB中。 使用“ 操作栏”模式中的指导原则来决定在顶层显示哪些项目以及要移至操作溢出的项目。

dynamic调整CAB操作在大多数情况下,您需要dynamic调整CAB中的操作,因为用户将更多项目添加到select中。 适用于单个选定数据项的操作不一定适用于同一种类的多个选定数据项。

不幸的是,报价中包含的链接链接到一个仅仅包含一般信息而没有详细说明的部分。 更糟糕的是,它链接回Selection | Android开发者页面。

再看一下,我发现了Lars Vogel的这个教程 。 我引用(格式化我的):

上下文操作模式激活临时ActionBar ,该临时ActionBar在特定子任务的持续时间内覆盖应用程序ActionBar

上下文动作模式通常通过select项目或长时间点击来激活。

要实现这一点,请在视图或活动上调用startActionMode( )方法。 这个方法得到一个ActionMode.Callback对象,它负责上下文ActionBar的生命周期。

您也可以通过registerForContextMenu(view)方法将上下文菜单分配给View 。 如果用户“长按”视图,则上下文菜单也被激活。 每次激活上下文菜单时都会调用onCreateContextMenu()方法,因为上下文菜单在使用后会被丢弃。 您应该更喜欢使用上下文菜单的上下文操作模式。

最突出的参考提到我们可以使用registerForContextMenu(view)创build我们自己的菜单。 我没有复制答案,而是由J. PabloFernándezfind了答案,其中包含了一个关于如何应用自己的CAB的代码示例。 注册新的上下文菜单应该覆盖任何默认菜单,但我不确定。 由于此刻我无法testing,我很乐意听到这是否解决了您的问题。