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.