Remova a sombra abaixo da barra de ação


208

Eu uso actionbarsherlock. O trecho de código abaixo é responsável por alterar seu plano de fundo para um 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>

E funciona para actionbarsherlock (nas versões abaixo do favo de mel). Mas no ICS eu tenho uma sombra abaixo da barra de ação que não quero. Qual é o item de estilo para fazê-lo desaparecer?

Respostas:


481

Qual é o item de estilo para fazê-lo desaparecer?

Para remover a sombra, adicione isso ao tema do seu aplicativo:

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

ATUALIZAÇÃO: como @ Quinny898 afirmou, no Android 5.0 isso mudou, você deve acessar setElevation(0)sua barra de ação. Observe que, se você estiver usando a biblioteca de suporte, deve chamá-lo da seguinte forma:

getSupportActionBar().setElevation(0);

Não é um estilo remover a sombra abaixo da barra de status, não da barra de ação?
Michał K

96
Obrigado, desapareceu. O importante é notar que essa linha de código deve aparecer no tema do aplicativo, não no estilo da barra de ação.
Michał K

3
Eu trabalho! O que precisa ficar claro é que essa linha de código deve ser adicionada na tag do tema do aplicativo, não na tag do tema da ActionBar.
tuoxie007

E outra coisa que também deve ser observado é que você deve mudar seu tema de valores, valores-v11, v14 valor (se você usar barra de ferramentas, ignorar este)
TheOne_su

6
para dispositivos pré-pirulito getSupportActionBar().setElevation(0);não funciona. Então você colocou <item name="android:windowContentOverlay">@null</item>seu tema de aplicativo. Eu tive o problema semelhante. Agora eu tenho os dois. setElevation e adicionado item windowContentOverlay no tema do aplicativo. setElevation funciona para o Android 5.0 e superior, enquanto o outro funciona para pré-pirulito. Felicidades!
Reaz Murshed

140

Para o Android 5.0, se você deseja defini-lo diretamente em um estilo, use:

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

e para usar a compatibilidade da biblioteca de suporte:

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

Exemplo de estilo para um tema de luz 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>

Em seguida, aplique este estilo ActionBar personalizado ao seu tema de aplicativo:

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

Para o Android 5.0 anterior, adicione isso também ao tema do seu aplicativo:

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

1
Não funcionou para mim para dispositivos anteriores à versão 5.0. O problema foi que eu adicionei o windowContentOverlaytema da barra de ação, não o tema do aplicativo.
Oliv

Sinto muito, mas estou tentando fazer a coisa oposta: faça com que a sombra de elevação apareça nos dispositivos pré-pirulito (consegui fazê-lo android:elevationnos dispositivos pirulitos). Não consigo fazer isso usando essa abordagem. Eu acredito que seria bastante correto. Coloque um valor diferente de zero para os atributos de elevação e seria isso.
acrespo

Ele deve estar visível por padrão se você não tocar no atributo android: windowContentOverlay, talvez verifique se está usando um tema correto ... Acho que você precisa usar um tema AppCompat.
Sloosh

mas como lidar com android:windowContentOverlaya API pré-pirulito? Não consigo compilar se meu minSDK é pré-pirulito, mas o destino é 21?
Opiatefuchs

2
Isso funcionou, mas apenas quando eu usei <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">sem style/no parentatributo.
Igor

103

No Android 5.0, isso mudou, você deve chamar setElevation (0) na sua barra de ação. Observe que, se você estiver usando a biblioteca de suporte, deve chamar assim:

getSupportActionBar().setElevation(0);

Ele não é afetado pelo item de estilo windowContentOverlay, portanto, nenhuma alteração nos estilos é necessária.


1
Você precisa fazer isso para todas as atividades ou existe um método rápido para aplicar a todas as atividades? Vou adicionar todas as minhas atividades por enquanto. Obrigado!
cnfw

Como é como qualquer outro método ActionBar (. Por exemplo, o título), eu diria que cada atividade
Kieron

Isso é uma vergonha. Seria bom definir parâmetros como este no arquivo styles.xml. Talvez isso virá em uma atualização futura
cnfw

isso não está funcionando em versões inferiores à 5.0. A barra de ação do suporte não deve ser compatível com todos os dispositivos anteriores?
splinter123

mesmo que @ splinter123 aqui :( saber como posso remover as sombras em pré-Lollipop ao usar AppCompat.
FD_

55

adicione app:elevation="0dp"AppBarLayout para ocultar sombra na barra de aplicativos


1
Olhe para todos, basta aplicar esta solução e esquecer o que todos os outros disseram. Obrigado cara! funciona! Solução muito simples!
S Bruce

1
Use desta forma: <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 Use isso no caso de AppBarLayout como 'getSupportActionBar (). SetElevation (0);' não funciona
Salil Dhawan

39

Se você estiver trabalhando com o ActionBarSherlock

No seu tema, adicione este:

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

Esta é uma resposta melhor, ele especifica o item de compatibilidade
1owk3y

25

Você deve definir app:elevation="0dp"no android.support.design.widget.AppBarLayoute então ele 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
isso faz com que a sombra da AppBar esteja ausente em todos os lugares - como posso controlar isso programaticamente?
Suisse

14
app:elevation="0dp" 

mas não

android:elevation="0dp"

trabalhou para mim no android L


2

Eu tenho esse mesmo problema e resolvi com sucesso esse problema. Tudo o que você precisa fazer é alterar a elevação para 0 valor de ponto flutuante na atividade em que você deseja remover a elevação.

Se você deseja alterá-lo em uma atividade chamada MyActivity.java, é necessário obter o ActionBarprimeiro.

Primeiro importe a ActionBarclasse

import android.support.v7.app.ActionBar;

após a importação, é necessário inicializar uma variável da barra de ação e definir sua elevação como 0.

 private ActionBar toolbar;

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

1

Para desenvolvedores do Xamarin, use: SupportActionBar.Elevation = 0;para AppCompatActivityou ActionBar.Elevation = 0;para atividades não compatíveis


1

Solução para Kotlin (Android 3.3, Kotlin 1.3.20)

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

Não sei por que isso está downvoted (eu sou novo no Kotlin), mas isso funcionou para mim, onde outros não
Allen Wixted

1

Experimente Isso me ajudou sem alterar o tema. Coloque seu AppBarLayout dentro de qualquer layout. Espero que isso ajude você

<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 aqueles que trabalham com fragmentos e ele desapareceu após a configuração toolbar.getBackground().setAlpha(0);ou qualquer desaparecimento, acho que você deve trazer o AppBarLayout para o último no xml, então o Fragment, em seguida, AppBarLayout, então relativelayout / constrangimento / linear, conforme o que você usa.


0

Adicione isso toolbar.getBackground().setAlpha(0);ao método OnCreate interno. Adicione isto: android:elevation="0dp" android:background="@android:color/transparent ao seu arquivo xml da barra de ferramentas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.