我正在开发一款ICS(4.0.3)平板电脑应用,我们广泛使用DialogFrament
。当用户在对话框片段中的文本编辑器中长按时,我需要阻止复制/粘贴操作栏出现在屏幕顶部。幸运的是,我们有自己的基类,扩展DialogFragment
(称之为MyOrgDialogFragment
)我们所有的对话框片段都是基于的,所以如果需要我可以修改它。
我的第一次尝试涉及在OnCreateDialog()
覆盖MyOrgDialogFragment
,然后在其中覆盖onWindowStartingActionMode()
,即:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
return new Dialog(getActivity()) {
@Override
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback)
{
return new ActionMode()
{
// [ All overrides empty ]
}
}
};
}
这几乎可以工作:它会阻止操作栏显示,当我在编辑字段中长按(这很好)时仍然会出现选择句柄,但是当我将焦点移到焦点上时,选择手柄没有被正确地解除另一个编辑字段。我最终将“僵尸”选择手柄悬停在我选择的每个编辑区域上。
有人能指出我更好的解决方案吗?
答案 0 :(得分:4)
查看可在TextView
/ EditText
上使用的setCustomSelectionActionModeCallback方法。如果您使用这样的空ActionMode.Callback
:
private ActionMode.Callback mModeCallback = new Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
return false;
}
};
选择ActionMode
将被阻止(切换字段时没有选择处理程序,实际上它们根本不会出现)。