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

时间:2012-02-27 01:11:24

标签: android android-actionbar

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

在我的活动的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;
    }
}

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

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

它工作正常,我可以点击它(虽然它显然什么也没做)。我在这里缺少什么?

编辑:只是想添加我遇到完全相同的问题,如果我实际上膨胀菜单而不是以编程方式添加菜单项。但是,如果我强迫它始终显示为动作,问题就会消失。

3 个答案:

答案 0 :(得分:3)

这是框架问题。如果textview收到“焦点更改”事件,则textview将停止操作模式。当显示溢出弹出窗口时,textview会错过焦点。

答案 1 :(得分:1)

此问题已在Android 6.0中解决。但是,您应该使用Android 6.0中ActionMode.Callback2所述的here

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

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

答案 2 :(得分:0)

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