192.168.1.1 - 192.168.1.1 - 192.168.1.1

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 Respuesta

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