我正在开发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将被阻止(切换字段时没有选择处理程序剩余,实际上它们根本不会出现)。

10-08 13:16
查看更多