web-dev-qa-db-fra.com

Android AppCompat 21 Altitude

Existe-t-il un moyen d'ajouter une élévation à un View dans des périphériques antérieurs à Lollipop sans les envelopper dans un CardView?

74
Eliezer

ViewCompat.setElevation(View, int) ne crée actuellement aucune cale.

Le seul moyen de simuler l'altitude consiste à appliquer une ombre antérieure à la v21. Définissez votre style/mise en page/dessinable dans values et remplacez-le dans values-v21. Pour les boutons, j'utilise des remplacements de style. Pour les mises en page, je choisis généralement le remplacement de la référence (utilisez @null se débarrasser d'un drawable).

Espérons qu'à l'avenir, une mise à jour de la bibliothèque de support ajoutera des shims.

Ce fil reddit garde trace de cette mise à jour.

Modifier

La nouvelle bibliothèque de conception de support crée effectivement des correctifs pour le bouton d'action flottante.

73
Derk-Jan

Voici un exemple comment ajouter une ombre au-dessous de Toolbar sur des périphériques antérieurs à Lollipop:

enter image description here

La mise en page devrait être ceci:

<RelativeLayout
    Android:id="@+id/toolbar_container"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true" >

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:animateLayoutChanges="true"
        Android:background="?attr/colorPrimary"
        Android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <View
        Android:id="@+id/toolbar_shadow"
        Android:layout_width="match_parent"
        Android:layout_height="@dimen/toolbar_shadow"
        Android:layout_below="@id/toolbar"
        Android:background="@drawable/toolbar_dropshadow" />
</RelativeLayout>

Et l'ombre est:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <gradient
        Android:angle="90"
        Android:endColor="#88444444"
        Android:startColor="@Android:color/transparent" />

</shape>
64
thiagolr

J'obtiens le même effet en utilisant,

  Android:background="@Android:drawable/dialog_holo_light_frame"

Ma sortie testée:

enter image description here

référence - https://stackoverflow.com/a/25683148/3879847

Mise à jour: Si vous voulez changer la couleur de cet dessin, essayez @Irfan answer

https://stackoverflow.com/a/40815944/3879847

47
Ranjith Kumar