上下文操作菜单无法直观地超过片段中的操作栏位置

时间:2015-01-28 16:35:33

标签: android android-fragments

我有一个ActivityFragment包含ListView个项目,用户可以点击这些项目并调用上下文操作模式。

我喜欢发生的事情是documentation说明:

  

上下文操作栏不一定与   行动吧。它们独立运作,即使是背景   操作栏直观地取代操作栏位置

然而,这是我目前正在经历的行为。截至目前,上下文操作模式显示高于 ActionBar,如下图所示。

current

到目前为止我没有成功的尝试:

  • ActionMode逻辑从Fragment移至主持人Activity
  • 在我的主题中设置<item name="windowActionModeOverlay">true</item>
  • 致电getActivity().getMenuInflater()而非mode.getMenuInflater()

这是我调用上下文操作菜单的代码

public class NotesFragment extends Fragment implements View.OnClickListener{

    private ActionMode mActionMode;

    @Override
    public void checkBoxChecked(Note which) {
        if (mActionMode == null)
            mActionMode = getActivity().startActionMode(mActionModeCallback);
    }

    private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

        // Called when the action mode is created; startActionMode() was called
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // Inflate a menu resource providing context menu items
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.context, menu);
            return true;
        }

        // Called each time the action mode is shown. 
        // Always called after onCreateActionMode, but
        // may be called multiple times if the mode is invalidated.
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

            return false; // Return false if nothing is done
        }

        // Called when the user selects a contextual menu item
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
                case R.id.context_delete:
                    //Do work unrelated to topic
                    mode.finish(); // Action picked, so close the CAB
                    return true;
                case R.id.context_move:
                    //Do work unrelated to topic
                    mode.finish(); // Action picked, so close the CAB
                    return true;
                default:
                    return false;
            }
        }

        // Called when the user exits the action mode
        @Override
        public void onDestroyActionMode(ActionMode mode) {
            mActionMode = null;
        }
    };

}

编辑: 这是Activity,其中Fragment位于:

public class MainActivity extends ActionBarActivity implements DialogFragmentMoveNote.DialogFragmentMoveNoteListener,
        DialogFragmentRemoveNote.DialogFragmentRemoveNoteListener, DialogFragmentAddNewFolder.DialogFragmentAddNewFolderListener,
        DialogFragmentDeleteFolder.DialogFragmentDeleteFolderListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onAddNewFolderPositiveClick(Folder folder) {
        //Tell the fragment to do work
    }

    @Override
    public void onRemoveNotesPositiveClick() {
        //Tell the fragment to do work
    }

    @Override
    public void onMoveNotePositiveClick(String chosenFolder) {
        //Tell the fragment to do work
    }

    @Override
    public void onDeleteFolderPositiveClick() {
        //Tell the fragment to do work
    }

    private void displayNoteDetailsFromWidget(String noteId){
        //Tell the fragment to do work
    }
}

为什么上下文操作菜单在视觉上不会超过ActionBar,因为文档状态应该是?

1 个答案:

答案 0 :(得分:5)

解决方法是添加

<item name="android:windowActionModeOverlay">true</item>

到我的Theme,现在看起来像

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:windowActionModeOverlay">true</item>
</style>

我在查看this answer

后找到了解决方案