我正在开发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 ]
}
}
};
}
这几乎起作用:它阻止了操作栏的出现,并且当我在编辑字段中长按时选择手柄仍然出现(这很好),但是当我将焦点移到另一个编辑字段时,选择手柄无法正确关闭。最后,我将“僵尸”选择句柄悬停在我在其中进行选择的每个编辑字段上。
谁能指出我想要更好的解决方案?
最佳答案
看看可以在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
将被阻止(切换字段时没有选择处理程序剩余,实际上它们根本不会出现)。