Sin sombra por defecto en la barra de herramientas?

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 

enter image description here

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:

enter image description here

Hay muchos otros trucos con la biblioteca de soporte de diseño.

  1. http://inthecheesefactory.com/blog/android-design-support-library-codelab/en
  2. http://android-developers.blogspot.in/2015/05/android-design-support-library.html

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

enter image description here

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/