Android AppCompat 21 Elevation

76

Gibt es eine Möglichkeit, einem ViewPre-Lollipop-Gerät eine Erhöhung hinzuzufügen , ohne sie in ein zu wickeln CardView?

Elieser
quelle
Siehe hier: android-developers.blogspot.in/2014/10/… Sie haben es für die Aktionsleiste als getSupportActionBar (). SetElevation (0) angegeben. Versuchen Sie dasselbe für Ihre Kartenansicht.
AruLNadhaN
3
Ich möchte keine Höhe zu a hinzufügen CardView. Ich möchte es Viewwenn möglich zu jedem hinzufügen .
Elieser

Antworten:

79

ViewCompat.setElevation(View, int) Derzeit erstellt keine Unterlegscheiben.

Die einzige Möglichkeit, die Höhe zu simulieren, besteht darin, einen Schatten vor Version 21 anzuwenden. Definieren Sie Ihren Stil / Layout / Zeichenbar valuesund überschreiben Sie ihn in values-v21. Für Schaltflächen verwende ich Stilüberschreibungen. Bei Layouts verwende ich normalerweise die Referenzüberschreibung (verwenden Sie @nulldiese Option, um ein Zeichenelement zu entfernen).

Hoffentlich werden in Zukunft durch ein Update der Support-Bibliothek Shims hinzugefügt.

Dieser reddit-Thread verfolgt das Update.

Bearbeiten

Die neue Support-Design-Bibliothek erstellt tatsächlich Unterlegscheiben für die schwebende Aktionsschaltfläche.

Derk-Jan
quelle
2
Das funktioniert immer noch nicht richtig? Was genau sind Unterlegscheiben :)?
Daniel Wilson
6
@DanielWilson Ein Shim ist eine Problemumgehung ( en.wikipedia.org/wiki/Shim_(computing) ). Da die Schatten in 5.0 nativ sind, benötigen Sie eine Unterlegscheibe für <5.0
Derk-Jan
Sehr interessant, danke :) Nun, hoffentlich geben die Ingenieure dies nicht für ältere Geräte auf. Ich würde es lieber nicht selbst tun: D
Daniel Wilson
@ DanielWilson um ehrlich zu sein: Material Design ist Teil der 5.0+ Generation. Es macht nicht wirklich "Sinn", es vor dem Lutscher zu haben. Ich denke, dass das Fehlen des Renderthreads Gründe dafür sind, dass es nicht unterstützt wird.
Derk-Jan
@ Derk-Jan leider ist Android 5 <2% Marktanteil auch Monate nachdem Sie das geschrieben haben
Greg Ennis
64

Dies ist ein Beispiel für das Hinzufügen eines Schattens unter den ToolbarGeräten vor dem Lutschern:

Geben Sie hier die Bildbeschreibung ein

Das Layout sollte folgendermaßen aussehen:

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

Und der Schatten ist:

<?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>
thiagolr
quelle
1
Können Sie Informationen über - android: layout_height = "@ dimen / toolbar_shadow"
Ranjith Kumar
2
es ist die Größe des Schattens, höher der Wert, mehr "erhöht" die Symbolleiste ist
thiagolr
Laut dem von der Google Design-Website ausgewählten Wert sollte die Endfarbe # 45000000 sein. Es kommt jedoch darauf an, wo der Wert ohnehin erworben wurde.
Neugieriger Sam
So eine einfache Lösung. Vielen Dank!
BK
48

Ich erreiche den gleichen Effekt mit,

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

Meine getestete Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Referenz - https://stackoverflow.com/a/25683148/3879847

Update: Wenn Sie die Farbe dieses Zeichens ändern möchten, versuchen Sie es mit der Antwort von @Irfan

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

Ranjith Kumar
quelle
1
Ich habe diesen Trick für einen RecyclerView-Adapter verwendet und großartig gearbeitet. Danke für das Teilen!
Alberto Gaona
Wie mache ich das für AlertDialog? Ich habe einen Stil, der auf Dialoge angewendet wird, also habe ich dort das erwähnte Attribut hinzugefügt, aber es sieht komisch aus. Es sieht so aus, als hätte ich mehrere Blätter / Ebenen als Hintergrund hinzugefügt. Irgendeine Ahnung ?
cgr
Die Verwendung von Systemressourcen wie @android: drawable / dialog_holo_light_frame ist gefährlich, nicht wahr? Einige Hersteller von Mobilgeräten können Systemressourcen überschreiben, sodass diese Ressourcen auf verschiedenen Geräten möglicherweise unterschiedlich angezeigt werden, nicht wahr?
P. Ilyin
Ich benutze diese Ressource mehr als 2 Jahre. Trotzdem bekomme ich keine Probleme. Es funktioniert in Samsung, Asus, Nexus, Moto. Und Lenovo auch.
Ranjith Kumar
-4

Sie können jetzt das Schema xmlns:app="http://schemas.android.com/apk/res-auto"und verwendenapp:elevation

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
...

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            app:elevation="5dp">
neteinstein
quelle
Für die Ansicht muss appcompact wie 'android.support.v7.widget.AppCompatTextView' verwendet werden
abbasalim