AppCompat elevação Toolbar v21 pré -pirulito

? Tristan Vanderaerden @ | Original: StackOverFlow
---

Em primeiro lugar, eu sei que esta pergunta tem sido feita antes, mas ele não foi respondida antes. Espero que alguém possa me dar uma resposta.

Na minha aplicação, eu uso a barra de ferramentas do Appcompat_v7 (API 21) . Este é o meu código:

<android.support.v7.widget.Toolbar
    style="@style/DarkActionbarStyle"
    android:id="@+id/toolBar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/actionbar_height" />

E este é o estilo de barra de ferramentas que eu uso:

<style name="DarkActionbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="android:background">?attr/colorPrimary</item>
    <item name="titleTextAppearance">@style/ActionBarTitle</item>
    <item name="android:elevation">2dp</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    <item name="theme">@style/ThemeActionBarDark</item>
</style>

<style name="ThemeActionBarDark" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="actionBarItemBackground">@drawable/btn_dark_orange</item>
    <item name="selectableItemBackground">@drawable/btn_dark_orange</item>
</style>

O problema é, que a elevação não funciona pré- pirulito. Então, minha pergunta é: É possível ter uma sombra sob a barra de ferramentas no dispositivos de pré- pirulito ?

---

Top 5 Responder

1hitch.united @

Eu acho que você pode, eu tive um problema com o CardView elevação utilizando a biblioteca de suporte . Para fazê-lo funcionar eu tive que configurar meu ponto de vista como este.

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android.support.v7.cardview="http://schemas.android.com/apk/res-auto"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="125dp"
    android:orientation="horizontal"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="5dp"
    android.support.v7.cardview:cardElevation="10dp">
</android.support.v7.widget.CardView>

Então eu acho que você deve tentar defini-lo como este em XML -

android.support.v7.toolbar:elevation="10dp"

Mais uma vez, eu não testar isso. Mas repare que eu tive que usar o android.support.v7 para fazê-lo funcionar .

2Alessandro Roaro @

Você não pode usar o atributo elevação antes API 21 ( Lollipop Android) . No entanto, você pode adicionar a sombra de programação, por exemplo, usando uma exibição personalizada colocado abaixo do Toolbar .

For example:

<ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:background="@drawable/shadow"/>

Quando a sombra é um drawable com um gradiente de preto .

3Zielony @

É possível ter sombras reais - animado e gerado . O método utilizado pelo Lollipop está disponível desde o Froyo . A aceleração de hardware usado para geração de sombra está disponível desde o Honeycomb, eu acho. Veja como funciona:

draw your view to an off-screen bitmap with LightingColorFilter set to 0,0 blur the black shape (the off-screen bitmap) using the ScriptIntrinsicBlur class and elevation value as radius draw the bitmap beneath the view

Ela exige a adição de atributos elevação personalizados, vistas personalizadas capaz de renderizar sombras, e usando tornar roteiro e da biblioteca de compatibilidade (para dispositivos mais antigos ) . Eu não vou mergulhar nos detalhes, porque há um monte deles, incluindo problemas com a compilação e otimizações de desempenho menores. Mas é possível .

Por que não há nenhuma sombra na biblioteca de apoio oficial ?

it would require changes in the UI framework as it's impossible to freely draw outside view bounds smooth animation requires a quite good GPU

See:

https://www.youtube.com/watch?v=jbU4SXblO5s https://androidreclib.wordpress.com/2014/11/25/lollipops-shadows-on-gingerbread/ https://github.com/ZieIony/Carbon