android - studio - Barra de herramientas y barra de acción contextual con AppCompat-v7
barra de acciones word (7)
Actualizar:
Solución: use la propiedad windowActionModeOverlay . Establezca esto en su tema:
<item name="windowActionModeOverlay">true</item>
y el modo de acción se mostrará sobre la barra de acción en lugar de presionarlo hacia abajo. (Si no está utilizando la última AppCompat, debe agregar el prefijo "android:" a la propiedad). Básicamente, le permite a AppCompat saber que tiene una barra de herramientas ubicada en la parte superior de la pantalla y que debe dibujar el ActionMode encima.
Antigua respuesta / solución alternativa:
Tuve el mismo problema. No importa qué tema establezca, siempre empuja hacia abajo la barra de herramientas que configuré como ActionBar. Intenté con y sin la biblioteca de soporte, pero no importó.
Lamentablemente no pude solucionarlo, así que he creado una solución alternativa.
En mi
ActionModeCallback
de
onCreateActionMode
la barra de acción:
actionBarToolbar.setVisibility(View.GONE);
y en
onDestroyActionMode
lo muestro nuevamente:
actionBarToolbar.setVisibility(View.VISIBLE);
La ocultación / visualización ocurre tan rápido que no se nota en mis dispositivos de prueba. Por supuesto, hay un inconveniente: aunque la animación de entrada todavía funciona, la animación de salida de la barra de acción contextual se pierde porque la barra de herramientas aparece inmediatamente sobre ella. Pero hasta que encontremos una mejor solución, supongo que estamos atrapados con esto.
(Mi actividad en realidad está extendiendo una clase personalizada
BaseActivity
que tiene un método llamado
getActionBarToolbar()
, tomado del
código fuente de la aplicación Google I / O 2014
, para que pueda obtener fácilmente la Barra de herramientas:
BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);
Lástima que la aplicación de E / S no use la barra de acción contextual).
Estoy trabajando en el uso de la barra de herramientas recién agregada que se introdujo en Lollipop y la biblioteca AppCompat-v7. Seguí esta guía sobre cómo configurar la Barra de herramientas. Noté que cuando invocas algo que mostrará la Barra de acciones contextual (como resaltar texto para copiar / pegar), empujará la Barra de herramientas hacia abajo en la página. Puedes ver de lo que estoy hablando en la imagen al final de la página:
Entonces, esencialmente, lo configuré así. Tengo la barra de herramientas definida en un archivo xml que uso con las etiquetas de inclusión:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
Luego, lo instancia en mi opinión:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
En código, lo configuré así:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
¿Alguien sabe cómo hacerlo para que la barra de acción contextual aparezca sobre la barra de herramientas?
En mi caso,
<item name="windowActionModeOverlay">true</item>
no funcionó, pero este trabajo:
<item name="android:windowActionModeOverlay">true</item>
, el
android
es la clave.
La solución de Jacob funcionó para mí, pero la ActionBar contextual era transparente y la barra de herramientas visible a través de ella. Esto se puede resolver de la siguiente manera:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
....
....
<item name="actionModeStyle">@style/CustomActionMode</item>
</style>
<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="background">@color/primary_material_light</item>
</style>
El tema "AppTheme.Base" debe ser el aplicado a la barra de herramientas.
Más detalles sobre el estilo contextual de ActionBar:
Cómo personalizar la barra de acción contextual usando appCompat en diseño de materiales
Método muy útil para llevar la barra de herramientas al frente
toolbar.bringToFront()
No lo inicies en tu actividad, sino en tu 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>
Otra pequeña adición: asegúrese de configurar al menos una pantalla vacía en la actividad a través de
setContentView(R.layout.empty_screen)
si carga toda la interfaz de
ft.replace(android.R.id.content, fragment)
en fragmentos (
ft.replace(android.R.id.content, fragment)
).
Solo una pequeña adición: para
<item name="windowActionModeOverlay">true</item>
para trabajar es importante llamar a
super.onCreate(savedInstanceState)
ANTES de
llamar a
setContentView(R.layout.your_activity)
en su actividad.
Realmente hace la diferencia en este caso!