Estoy trabajando para usar 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 acción 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?
Respuestas:
Actualizar:
Solución: use la propiedad windowActionModeOverlay . Establezca esto en su tema:
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
'sonCreateActionMode
me escondo la barra de acción:y en
onDestroyActionMode
lo muestro nuevamente: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
BaseActivity
clase personalizada que tiene un método llamadogetActionBarToolbar()
, tomado del código fuente de la aplicación Google I / O 2014 , por lo que puedo obtener fácilmente la Barra de herramientas:Lástima que la aplicación de E / S no use la barra de acción contextual).
fuente
No lo inicies en tu actividad, sino en tu barra de herramientas. En tu actividad:
y tienes que usar
fuente
AppCompatActivity.startSupportActionMode(callback)
, para obtener compatibilidad con atributos comoapp:iconTint
en el elemento de menú xmls.Solo una pequeña adición: para
para trabajar es importante llamarsuper.onCreate(savedInstanceState)
ANTES de llamarsetContentView(R.layout.your_activity)
a su actividad. Realmente hace la diferencia en este caso!fuente
En mi caso,
<item name="windowActionModeOverlay">true</item>
no funcionó, pero este trabajo:<item name="android:windowActionModeOverlay">true</item>
elandroid
es la clave.fuente
<item name="windowActionModeOverlay">true</item>
con la barra de herramientas appcompat, de lo contrario se usa elandroid
espacio de nombresLa 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:
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
fuente
Método muy útil para llevar la barra de herramientas al frente
toolbar.bringToFront()
fuente
View.bringToFront()
es una operación muy pesada y generalmente debe evitarse a toda costa.Otra pequeña adición: asegúrese de establecer al menos una pantalla vacía en la actividad a través de
setContentView(R.layout.empty_screen)
si carga toda la interfaz de usuario en fragmentos (ft.replace(android.R.id.content, fragment)
).fuente