studio how developer create bar android android-support-library android-toolbar android-actionmode

developer - how to use toolbar android



Mostrar ActionMode sobre la barra de herramientas (5)

Como está utilizando la Toolbar , también asumo que está utilizando AppCompatActivity y ha reemplazado la Toolbar incorporada en ActionBar con la Toolbar setSupportActionBar(toolbar);

En primer lugar, asegúrese de importar el espacio de nombres correcto.

import android.support.v7.view.ActionMode;

y no

import android.view.ActionMode;

luego usa

_actionMode = startSupportActionMode(this);

y no

_actionMode = startActionMode(this);

Estoy tratando de usar android.view.ActionMode con la nueva android.support.v7.widget.Toolbar , además de la tradicional android.app.ActionBar . Puedo mostrarlo con:

toolbar.startActionMode(callback);

El problema es que ActionMode se muestra sobre la ActionBar , y no sobre la Toolbar . ¿Existe alguna manera de cambiar esto?

Intenté configurar lo siguiente en mi tema, pero no parece cambiar nada:

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


Esta es la solución que hice.

En mi método onCreateActionMode de ActionMode.Callback , agrego esto:

StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode; Field mContextView; try { mContextView = StandaloneActionMode.class.getDeclaredField("mContextView"); mContextView.setAccessible(true); View contextView = (View) mContextView.get(standaloneActionMode); MarginLayoutParams params = (MarginLayoutParams) contextView.getLayoutParams(); params.topMargin = mToolbar.getTop(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); }

Esto funciona para mi.


He intentado todos los métodos anteriores, pero todavía no funciona. Y luego, probé el siguiente método:

private class ActionModeCallback implements ActionMode.Callback { @Override public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { actionMode.getMenuInflater().inflate(R.menu.note_find_action, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { ((AppCompatActivity) getActivity()).getSupportActionBar().hide(); return false; } @Override public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; } @Override public void onDestroyActionMode(ActionMode actionMode) { ((AppCompatActivity) getActivity()).getSupportActionBar().show(); } }

Aquí, utilicé el modo de acción y el método startSupportActionMode de la biblioteca de soporte. Al mismo tiempo, también intenté modificar el tema de la actividad dada. Sin duda, no funciona. Entonces, si realmente no tienes otra opción, puedes probar esta.

Recientemente, descubrí que utilicé el marco Colorido para habilitar el tema múltiple de mi aplicación, esto cambiará el tema en el código. Cuando intenté modificar el estilo en este marco, funciona.

Espero que funcione.


No lo inicie en su actividad, sino en su barra de herramientas. En tu actividad:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.startActionMode(mActionModeCallback)

y tienes que usar

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

en su tema según lo declarado por Andre.


Prueba esto en tu tema:

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