【问题标题】:Contextual Action Menu not visually overtaking the Action Bar position in a Fragment上下文操作菜单没有在视觉上超过片段中的操作栏位置
【发布时间】:2015-01-28 16:35:32
【问题描述】:

我有一个Activity 和一个Fragment,其中包含一个带有项目的ListView,用户可以在其上单击并调用上下文操作模式。

我喜欢发生的事情就像documentation 所说的那样:

上下文操作栏不一定与 动作栏。它们独立运作,即使在上下文中 操作栏视觉上超过了操作栏位置

但是,这是我目前遇到的行为。目前,上下文操作模式出现在上方ActionBar,如下图所示。

到目前为止我尝试过的事情都没有成功:

  • 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;
        }
    };

}

编辑: 这是ActivityFragment 所在的位置:

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

【问题讨论】:

  • 在你的主题上使用<item name="windowActionModeOverlay">true</item>
  • 对不起@PedroOliveira,没有区别。
  • 请致电 getActivity().getMenuInflater() 而不是 mode.getMenuInflater()。让我知道它是否解决了任何问题
  • 还是什么都没有 :-( @PedroOliveira

标签: android android-fragments


【解决方案1】:

解决方案是添加

<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后找到了解决办法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多