溢出按钮强制动作模式完成

我有一个EditText,我希望用户能够选择一些文本并将一些基本格式应用于所选文本(粗体,斜体等)。 不过,我仍然想要标准的复制,剪切,粘贴选项来显示。 我在Android文档中的某个地方阅读过,为此,应该在EditText上调用setCustomSelectionActionModeCallback()并将其传递给ActionModeCallback(),这就是我所做的。 这是我的代码:

在我的activity的onCreate()方法中:

myEditText.setCustomSelectionActionModeCallback(new TextSelectionActionMode());

回调声明:

private class TextSelectionActionMode implements ActionMode.Callback {
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        return false;
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        menu.add("Bold");
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }
}

我遇到的问题是,当我点击溢出按钮(访问我的“粗体”菜单项)时,ActionMode会立即关闭。 如果我将其设置为始终显示为操作,请使用以下命令:

MenuItem bold = menu.add("Bold");
bold.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);

它工作正常,我可以点击它(虽然它显然没有什么)。 我在这里错过了什么?

编辑:只是想补充一点,如果我真的膨胀一个菜单,而不是通过编程添加菜单项,我遇到了完全相同的问题。 但是,如果我强迫它始终表现为行动,问题就会消失。


这是框架问题。 如果textview接收到“focus changed”事件,则textview停止操作模式。 当溢出弹出显示时,textview未命中焦点。


此问题已在Android 6.0中解决。 但是,您应该按照Android 6.0中的说明使用ActionMode.Callback2。

对于Android 5.x及以下版本,我推荐此解决方法:向ToolbarActionBar添加一个按钮,该按钮记录当前选择,然后打开另一个上下文菜单。

this.inputText_selectionStart = inputText.getSelectionStart();
this.inputText_selectionEnd = inputText.getSelectionEnd();
registerForContextMenu(inputText);
openContextMenu(inputText);
unregisterForContextMenu(inputText);

这是一个存档的Android错误:https://code.google.com/p/android/issues/detail?id=82640。 该链接包含一个解决方法。 幸运的是,这已在Android 6.0中得到修复。

链接地址: http://www.djcxy.com/p/57781.html

上一篇: Overflow button forces Action Mode to finish

下一篇: calling ExecutorService.shutDown() in java