溢出按钮强制动作模式完成
我有一个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及以下版本,我推荐此解决方法:向Toolbar
或ActionBar
添加一个按钮,该按钮记录当前选择,然后打开另一个上下文菜单。
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