Reputation: 6717
I have an Activity
with a Fragment
containing a ListView
with items, on which the user can click and invoke the Contextual Action Mode.
What I like to happen is as the documentation is stating:
The contextual action bar is not necessarily associated with the action bar. They operate independently, even though the contextual action bar visually overtakes the action bar position.
However, this is the behavior I'm currently experiencing. As of now, the Contextual Action Mode appears above the ActionBar
, as the figure below shows.
What I've tried so far without success:
ActionMode
logic from the Fragment
to the host Activity
.<item name="windowActionModeOverlay">true</item>
in my theme.getActivity().getMenuInflater()
instead of mode.getMenuInflater()
.This is my code where I invoke the Contextual Action Menu
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;
}
};
}
EDIT:
This is the Activity
, in which the Fragment
resides:
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
}
}
Why is the Contextual Action Menu not visually overtaking the ActionBar
, as the documentation state is should?
Upvotes: 4
Views: 1694
Reputation: 6717
Solution to this was to add
<item name="android:windowActionModeOverlay">true</item>
to my Theme
, which now looks like
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:windowActionModeOverlay">true</item>
</style>
I found the solution after looking at this answer
Upvotes: 5