如何在DialogFragment中选择文本时禁用操作栏?

时间:2013-01-31 15:48:07

标签: android android-actionbar android-dialogfragment

我正在开发一款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 ]
            }
        }
    };
}

这几乎可以工作:它会阻止操作栏显示,当我在编辑字段中长按(这很好)时仍然会出现选择句柄,但是当我将焦点移到焦点上时,选择手柄没有被正确地解除另一个编辑字段。我最终将“僵尸”选择手柄悬停在我选择的每个编辑区域上。

有人能指出我更好的解决方案吗?

1 个答案:

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