Appcompat v21 élévation barre d'outils de pré- sucette

? Tristan Vanderaerden @ | Original: StackOverFlow

Tout d'abord, je sais que cette question a déjà été posée, mais il n'a pas été répondu avant . Je espère que quelqu'un peut me donner une réponse .

Dans mon application, je utilise la barre d'outils de Appcompat_v7 ( API 21 ) . Ce est mon code :

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

Et ce est le style de barre d'outils que je utilise:

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

Le problème, ce est que l'élévation ne fonctionne pas pré- sucette. Donc ma question est : Est-il possible d'avoir une ombre sous la barre d'outils sur les dispositifs de pré - sucette ?



Top 5 Respuesta

1hitch.united @

Je pense que vous le pouvez, je ai eu un problème avec le CardView élévation en utilisant la bibliothèque de support . Pour le faire fonctionner, je ai eu à mettre en place mon avis comme ça.

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

Donc, je pense que vous devriez essayer de régler comme ça en XML -

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

Encore une fois, je ne ai pas testé cela. Mais remarquez, je ai dû utiliser le android.support.v7 pour le faire fonctionner .



2Alessandro Roaro @

Vous ne pouvez pas utiliser l'attribut d'altitude avant d' API 21 ( Android Lollipop ) . Vous pouvez cependant ajouter l'ombre par programmation, par exemple en utilisant une vue personnalisée placé en dessous de la «____» .

For example:

Toolbar

Où l'ombre est un étirable avec un gradient noir.

3Zielony @

Il est possible d'avoir de véritables ombres - animé et généré . La méthode utilisée par Lollipop est disponible depuis Froyo . Accélération matérielle utilisée pour la production d'ombre est disponible depuis Honeycomb je suppose. Voici comment cela fonctionne :

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

Il nécessite l'ajout d'attributs d'élévation personnalisés, des vues personnalisées capables d'ombres de rendu, et avec render scénario et la bibliothèque de compatibilité ( pour les anciens périphériques ) . Je ne vais pas à plonger dans les détails, parce qu'il ya beaucoup d'entre eux, y compris des problèmes avec la compilation et optimisations de performance mineures . Mais ce est possible.

Pourquoi il n'y a pas d'ombres dans la bibliothèque de soutien officiel ?

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