Estoy actualizando mi aplicación con la nueva barra de herramientas de la biblioteca de soporte v21. Mi problema es que la barra de herramientas no proyecta ninguna sombra si no configuro el atributo “elevación”. ¿Es ese el comportamiento normal o estoy haciendo algo mal?
Mi código es:
. . .
Y en mi actividad: método OnCreate:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar);
Terminé configurando mi propia sombra paralela para la barra de herramientas, pensé que podría ser útil para cualquiera que la buscara:
@ drawable / toolbar_dropshadow:
@ color / color_alizarin
#e74c3c
Google lanzó la biblioteca de soporte de diseño hace unas semanas y hay una solución ingeniosa para este problema en esta biblioteca.
Agregue la biblioteca de soporte de diseño como una dependencia en build.gradle
:
compile 'com.android.support:design:22.2.0'
Agregue AppBarLayout
suministrado por la biblioteca como un contenedor alrededor del diseño de la Toolbar
para generar una sombra AppBarLayout
.
Aquí está el resultado:
Hay muchos otros trucos con la biblioteca de soporte de diseño.
No puede usar el atributo de elevación antes de API 21 (Android Lollipop). Sin embargo, puede agregar la sombra mediante progtwigción, por ejemplo, utilizando una vista personalizada situada debajo de la barra de herramientas.
@ layout / toolbar
@ drawable / toolbar_dropshadow
en el diseño de su actividad
Esto funcionó muy bien para mí:
Use / valore las carpetas para aplicar el estilo de sombreado correcto según la versión del sistema operativo.
Para dispositivos de menos de 5.0 , use /values/styles.xml para agregar windowContentOverlay al cuerpo de su actividad:
A continuación, agregue su propia sombra personalizada cambiando su tema para incluir:
- @drawable/bottom_shadow
Puede obtener el recurso oculto de la aplicación IO de Google aquí: https://github.com/google/iosched/blob/master/android/src/main/res/drawable-xxhdpi/bottom_shadow.9.png
Para dispositivos 5.0 y posteriores , use /values-v21/styles.xml para agregar elevación a su barra de herramientas usando un estilo de encabezado personalizado:
Tenga en cuenta que en el segundo caso, tuve que crear un estilo MyViewArea vacío para que windowContentOverlay no se mostrara también.
[Actualización: se cambiaron los nombres de los recursos y se agregó Google shadow.]
Si está seleccionando ToolBar
como ActionBar
, simplemente llame:
getSupportActionBar().setElevation(YOUR_ELEVATION);
Nota: debe setSupportActionBar(toolbar);
después de setSupportActionBar(toolbar);
Mi problema es que la barra de herramientas no proyecta ninguna sombra si no configuro el atributo “elevación”. ¿Es ese el comportamiento normal o estoy haciendo algo mal?
Ese es el comportamiento normal. También vea las preguntas frecuentes al final de esta publicación .
Estaba jugando con esto durante horas, esto es lo que funcionó para mí.
Elimine todos los atributos de elevation
de los widgets appBarLayout
y Toolbar
(incluido styles.xml
si está aplicando un estilo).
Ahora dentro de la actividad, aplica la elvation
en tu actionBar
:
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setElevation(3.0f);
Esto debería funcionar.
También puede hacer que funcione con RelativeLayout
. Esto reduce la disposición del diseño un poco;
actionbar_background.xml
-
-
agregar al fondo de estilo actionbar_style
name = "displayOptions"> useLogo | showHome | showTitle | showCustom
agregar a Basetheme
Para 5.0 +: puede usar AppBarLayout con la barra de herramientas. AppBarLayout tiene una “elevación” attribure.
Tuve un problema similar con la sombra. La sombra la dibuja el padre directo de AppBarLayout en mi caso. Si la altura del elemento primario es la misma que la de AppBarLayout, no se puede dibujar la sombra. Por lo tanto, verificar el tamaño del diseño principal y quizás el nuevo diseño puede resolver el problema. https://www.reddit.com/r/androiddev/comments/6xddb0/having_a_toolbar_as_a_fragment_the_shadow/