developer - how to use toolbar android
Mostrar ActionMode sobre la barra de herramientas (5)
Como está utilizando la
Toolbar
, también asumo que está utilizandoAppCompatActivity
y ha reemplazado laToolbar
incorporada enActionBar
con laToolbar
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>