Rimuovi l'ombra sotto la barra delle azioni


208

Uso actionbarsherlock. Il pezzo di codice qui sotto è responsabile per cambiare il suo sfondo con uno personalizzato.

<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>

E funziona per actionbarsherlock (nelle versioni sotto a nido d'ape). Ma in ICS ho un'ombra sotto la barra delle azioni che non voglio. Qual è l'elemento di stile per farlo sparire?

Risposte:


481

Qual è l'elemento di stile per farlo sparire?

Per rimuovere l'ombra aggiungi questo al tema della tua app:

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

AGGIORNAMENTO: Come affermato da @ Quinny898, su Android 5.0 questo è cambiato, devi chiamare setElevation(0)sulla barra delle azioni. Nota che se stai usando la libreria di supporto devi chiamarla così:

getSupportActionBar().setElevation(0);

Non è uno stile per rimuovere l'ombra da sotto la barra di stato, non la barra delle azioni?
Michał K,

96
Grazie, è scomparso. La cosa importante da notare è che questa riga di codice dovrebbe apparire nel tema dell'app, non nello stile della barra delle azioni.
Michał K,

3
Lavoro! Ciò che deve essere chiaro è che questa riga di codice deve essere aggiunta nel tag del tema dell'app, non nel tag del tema ActionBar.
tuoxie007,

E un'altra cosa che dovrebbe anche essere notato è che dovresti cambiare il tuo tema in valori, valori-v11, valore-v14 (se usi la barra degli strumenti, ignora questo)
TheOne_su

6
per i dispositivi pre-lollipop getSupportActionBar().setElevation(0);non funziona. Quindi hai inserito <item name="android:windowContentOverlay">@null</item>il tema dell'applicazione. Ho avuto il problema simile. Ora li ho entrambi. setElevation da e aggiunta voce windowContentOverlay nel tema dell'applicazione. setElevation funziona per Android 5.0 e versioni successive mentre l'altro funziona per pre-lollipop. Saluti!
Reaz Murshed il

140

Per Android 5.0, se vuoi impostarlo direttamente in uno stile usa:

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

e per la compatibilità con la libreria di supporto utilizzare:

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

Esempio di stile per un tema luminoso 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>

Quindi applica questo stile ActionBar personalizzato al tema dell'app:

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

Per Android 5.0 precedente, aggiungi anche questo al tema della tua app:

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

1
Non ha funzionato per me per i dispositivi pre 5.0. Il problema era che ho aggiunto il windowContentOverlaytema alla barra delle azioni, non al tema dell'app.
Oliv

Mi dispiace ma sto provando a fare la cosa opposta, Far apparire l'ombra di elevazione in realtà sui dispositivi pre-lollipop (sono riuscito a farlo con i android:elevationdispositivi Lollipop). Non riesco a farlo, usando questo approccio. Credo che sarebbe abbastanza semplice. Inserisci un valore diverso da zero per gli attributi di elevazione e questo sarebbe.
acrespo,

Dovrebbe essere visibile per impostazione predefinita se non tocchi android: l'attributo windowContentOverlay, forse controlla che stai usando un tema corretto ... Penso che tu debba usare un tema AppCompat.
Sloosh,

ma come gestire android:windowContentOverlayl'API pre-lollipop? Non riesco a compilare se il mio minSDK è pre-lecca-lecca ma il target è 21?
Opiatefuchs,

2
Questo ha funzionato, ma solo quando ho usato <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">senza style/in parentattributo.
Igor,

103

Su Android 5.0 questo è cambiato, devi chiamare setElevation (0) sulla barra delle azioni. Nota che se stai usando la libreria di supporto devi chiamarla così:

getSupportActionBar().setElevation(0);

Non è interessato dall'elemento di stile windowContentOverlay, quindi non sono necessarie modifiche agli stili


1
Devi farlo per ogni attività o esiste un metodo rapido per applicarlo a tutte le attività? Aggiungerò questo tutte le mie attività per ora. Grazie!
cnfw,

Come qualsiasi altro metodo della barra delle azioni (es. Il titolo), direi ogni attività
Kieron,

È un peccato. Sarebbe bello impostare parametri come questo nel file styles.xml. Forse arriverà in un futuro aggiornamento
cnfw,

questo non funziona con versioni precedenti alla 5.0. La barra delle azioni di supporto non dovrebbe essere compatibile con tutti i dispositivi precedenti?
splinter123

lo stesso di @ splinter123 qui :( Mi chiedo come posso rimuovere le ombre su pre-Lollipop quando utilizzo AppCompat.
FD_

55

aggiungi app:elevation="0dp"AppBarLayout per nascondere l'ombra nella barra delle applicazioni


1
Guarda tutti, applica questa soluzione e dimentica ciò che hanno detto tutti gli altri. Grazie uomo! Funziona! Soluzione molto semplice!
S bruce,

1
Usa in questo modo: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" app: elevation = "0dp" android: theme = "@ style / AppTheme.AppBarOverlay">
Bharat Kul Ratan,

@MarcoFerrari Utilizzalo in caso di AppBarLayout come 'getSupportActionBar (). SetElevation (0);' non funziona
Salil Dhawan,

39

Se stai lavorando con ActionBarSherlock

Nel tuo tema aggiungi questo:

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

questa è una risposta migliore, specifica l'elemento di compatibilità
1owk3y

25

È necessario impostare app:elevation="0dp"in android.support.design.widget.AppBarLayoute quindi funziona.

<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
questo fa sì che l'ombra dell'AppBar sia assente ovunque: come posso controllarla a livello di codice?
Suisse,

14
app:elevation="0dp" 

ma no

android:elevation="0dp"

ha funzionato per me su Android L


2

Ho lo stesso problema e ho risolto con successo questo problema. Tutto quello che devi fare è solo cambiare l'elevazione in 0 in virgola mobile in quell'attività in cui desideri rimuovere l'elevazione.

Se si desidera modificarlo in un'attività chiamata MyActivity.java, è necessario ottenere ilActionBar primo.

Per prima cosa importa la ActionBarclasse

import android.support.v7.app.ActionBar;

dopo l'importazione è necessario inizializzare una variabile della barra delle azioni e impostarne l'elevazione su 0.

 private ActionBar toolbar;

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

1

Per gli sviluppatori Xamarin, utilizzare: SupportActionBar.Elevation = 0;per AppCompatActivityo ActionBar.Elevation = 0;per attività non compatibili


1

Soluzione per Kotlin (Android 3.3, Kotlin 1.3.20)

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

Non sono sicuro del motivo per cui questo è sottovalutato (sono nuovo a Kotlin) ma questo ha funzionato per me dove altri no
Allen Wixted

1

Prova questo mi ha aiutato senza cambiare tema. Inserisci il tuo AppBarLayout all'interno di qualsiasi layout. Spero che questo ti aiuti

<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

Per coloro che lavorano su frammenti e sono scomparsi dopo l'impostazione toolbar.getBackground().setAlpha(0);o qualsiasi scomparsa, penso che devi portare il tuo AppBarLayout all'ultimo nel file XML, quindi il suo frammento quindi AppBarLayout quindi correlivelayout / vincolo / lineare qualunque tu usi.


0

Aggiungi questo toolbar.getBackground().setAlpha(0);al metodo OnCreate. Aggiungere questo: android:elevation="0dp" android:background="@android:color/transparent al file xml della barra degli strumenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.