Eliminar sombra debajo de la barra de acción


208

Yo uso actionbarsherlock. El siguiente código es responsable de cambiar su fondo a uno personalizado.

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="background">@drawable/actionbar_bg</item>
    <item name="android:background">@drawable/actionbar_bg</item>
    <...>  
</style>

<style name="Theme.MyApp" parent="@style/Theme.Sherlock.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <..>
</style>

Y funciona para actionbarsherlock (en versiones debajo de nido de abeja). Pero en ICS tengo una sombra debajo de la barra de acción que no quiero. ¿Cuál es el elemento de estilo para que desaparezca?

Respuestas:


481

¿Cuál es el elemento de estilo para que desaparezca?

Para eliminar la sombra, agregue esto al tema de su aplicación:

<style name="MyAppTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowContentOverlay">@null</item>
</style>

ACTUALIZACIÓN: Como dijo @ Quinny898, en Android 5.0 esto ha cambiado, debe llamar setElevation(0)a su barra de acción. Tenga en cuenta que si está utilizando la biblioteca de soporte, debe llamarla así:

getSupportActionBar().setElevation(0);

¿No es un estilo eliminar la sombra debajo de la barra de estado, no la barra de acción?
Michał K

96
Gracias, desapareció. Es importante tener en cuenta que esta línea de código debe aparecer en el tema de la aplicación, no en el estilo de la barra de acción.
Michał K

3
¡Yo trabajo! Lo que debe quedar claro es que esta línea de código debe agregarse en la etiqueta del tema de la aplicación, no en la etiqueta del tema de ActionBar.
tuoxie007

Y otra cosa que también debe tenerse en cuenta es que debe cambiar su tema en valores, valores-v11, valor-v14 (si usa la barra de herramientas, ignore esto)
TheOne_su

66
para dispositivos pre-lollipop getSupportActionBar().setElevation(0);no funciona. Entonces has puesto <item name="android:windowContentOverlay">@null</item>el tema de tu aplicación. Tuve el problema similar. Ahora los tengo a los dos. setElevation from y el elemento windowContentOverlay agregado en el tema de la aplicación. setElevation funciona para Android 5.0 y versiones posteriores, mientras que el otro funciona para pre-lollipop. ¡Salud!
Reaz Murshed

140

Para Android 5.0, si desea configurarlo directamente en un estilo, use:

<item name="android:elevation">0dp</item>

y para el uso de compatibilidad con la biblioteca de soporte:

<item name="elevation">0dp</item>

Ejemplo de estilo para un tema ligero de AppCompat:

<style name="Theme.MyApp.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <!-- remove shadow below action bar -->
    <!-- <item name="android:elevation">0dp</item> -->
    <!-- Support library compatibility -->
    <item name="elevation">0dp</item>
</style>

Luego aplique este estilo personalizado de ActionBar al tema de su aplicación:

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>

Para Android 5.0 anterior, agregue esto también al tema de su aplicación:

<!-- Remove shadow below action bar Android < 5.0 -->
<item name="android:windowContentOverlay">@null</item>

1
No funcionó para mí para dispositivos pre 5.0. El problema era que agregué el windowContentOverlaytema de la barra de acción, no el tema de la aplicación.
Oliv

Lo siento, pero estoy tratando de hacer lo contrario, hacer que la sombra de elevación realmente aparezca en dispositivos pre-lollipop (he logrado hacerlo con android:elevationdispositivos Lollipop). No puedo hacerlo, usando este enfoque. Creo que sería bastante sencillo. Ponga un valor distinto de cero para los atributos de elevación y eso sería todo.
acrespo

Debería ser visible de forma predeterminada si no toca el atributo android: windowContentOverlay, tal vez compruebe que está usando un tema correcto ... Creo que necesita usar un tema AppCompat.
Sloosh

pero ¿cómo lidiar con android:windowContentOverlayla API pre lollipop? ¿No puedo compilar si mi minSDK es pre piruleta pero el objetivo es 21?
Opiatefuchs

2
Esto funcionó, pero sólo cuando lo utiliza <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">sin style/en el parentatributo.
Igor

103

En Android 5.0 esto ha cambiado, debe llamar a setElevation (0) en su barra de acción. Tenga en cuenta que si está utilizando la biblioteca de soporte, debe llamarla así:

getSupportActionBar().setElevation(0);

No se ve afectado por el elemento de estilo windowContentOverlay, por lo que no se requieren cambios en los estilos


1
¿Tiene que hacer esto para cada actividad, o hay un método rápido para que se aplique a todas las actividades? Agregaré todas mis actividades por ahora. ¡Gracias!
cnfw

Como es como cualquier otro método de barra de acción (por ejemplo, el título), yo diría que cada actividad
Kieron

Es una pena. Sería bueno establecer parámetros como este en el archivo styles.xml. Tal vez eso vendrá en una actualización futura
cnfw

Esto no funciona en versiones inferiores a la 5.0. ¿No se supone que la barra de acción de soporte es compatible con todos los dispositivos anteriores?
splinter123

igual que @ splinter123 aquí :( Me pregunto cómo puedo eliminar las sombras en pre-Lollipop cuando uso AppCompat.
FD_

55

agregue app:elevation="0dp"AppBarLayout para ocultar la sombra en la barra de aplicaciones


1
Mire a todos, simplemente aplique esta solución y olvide lo que todos los demás han dicho. ¡Gracias hombre! ¡funciona! Solución muy simple!
S bruce

1
Úselo así: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" app: elevación = "0dp" android: theme = "@ style / AppTheme.AppBarOverlay">
Bharat Kul Ratan

@MarcoFerrari Use esto en el caso de AppBarLayout como 'getSupportActionBar (). SetElevation (0);' no funciona
Salil Dhawan

39

Si está trabajando con ActionBarSherlock

En tu tema agrega esto:

<style name="MyTheme" parent="Theme.Sherlock">
    ....
    <item name="windowContentOverlay">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    ....
</style>

esta es una mejor respuesta, especifica el elemento de compatibilidad
1owk3y

25

Debe configurar app:elevation="0dp"en android.support.design.widget.AppBarLayouty luego funciona.

<android.support.design.widget.AppBarLayout
    app:elevation="0dp"... >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent"
        app:popupTheme="@style/AppTheme.PopupOverlay" >


    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

1
Esto hace que la sombra de la barra de aplicaciones esté en todas partes. ¿Cómo puedo controlar eso mediante programación?
Suisse

14
app:elevation="0dp" 

pero no

android:elevation="0dp"

funcionó para mí en Android L


2

Tengo este mismo problema y lo he resuelto con éxito. Todo lo que tiene que hacer es cambiar la elevación a un valor de coma flotante 0 en esa actividad en la que desea eliminar la elevación.

Si desea cambiarlo en una actividad llamada MyActivity.java, debe obtener elActionBar primera.

Primero importa la ActionBarclase

import android.support.v7.app.ActionBar;

después de importar, debe inicializar una variable de barra de acción y establecer su elevación a 0.

 private ActionBar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    .
    .
    toolbar=getSupportActionBar();
    toolbar.setElevation(0);
    .
    .
    }

1

Para desarrolladores de Xamarin, utilice: SupportActionBar.Elevation = 0;para AppCompatActivityo ActionBar.Elevation = 0;para actividades no compatibles


1

Solución para Kotlin (Android 3.3, Kotlin 1.3.20)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.elevation = 0f
}

No estoy seguro de por qué esto es rechazado (soy nuevo en Kotlin) pero funcionó para mí donde otros no lo hicieron
Allen escribió Wixted el

1

Prueba esto me ayudó sin cambiar de tema. Coloque su AppBarLayout dentro de cualquier diseño. Espero que esto lo ayude

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="false"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:layout_height="?attr/actionBarSize"
       android:background="@color/white">
        <ImageView
            android:src="@drawable/go_grocery_logo"
            android:layout_width="108dp"
            android:layout_height="32dp" />
    </android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>
</RelativeLayout>

0

Para aquellos que trabajan en fragmentos y desapareció después de la configuración toolbar.getBackground().setAlpha(0);o cualquier desaparición, creo que debe llevar su AppBarLayout al último en el xml, por lo que es Fragment, luego AppBarLayout y luego relativolayout / restriction / linear, según lo que use.


0

Agregue esto toolbar.getBackground().setAlpha(0);al método interno de OnCreate. Añada esto: android:elevation="0dp" android:background="@android:color/transparent a su archivo xml de barra de herramientas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.