Android AppCompat 21 Elevation


76

Чи є спосіб додати висоту до Viewпристроїв перед льодяником, не загортаючи їх у CardView?


Зверніться сюди: android-developers.blogspot.in/2014/10/... Вони вказали це для панелі дій як getSupportActionBar (). SetElevation (0). Тож спробуйте те саме для перегляду картки.
AruLNadhaN

3
Я не прагну додати висоту до CardView. Я хотів би додати його до будь-якого, Viewякщо це можливо.
Еліезер,

Відповіді:


79

ViewCompat.setElevation(View, int) в даний час не створює прокладок.

Єдиний спосіб імітувати висоту прямо зараз - застосувати тінь pre-v21. Визначте свій стиль / макет / малювання valuesта перевизначте його values-v21. Для кнопок я використовую перевизначення стилю. Що стосується макетів, я, як правило, звертаюся до перевизначення посилань (використовуйте, @nullщоб позбутися малюнка).

Сподіваємось, в майбутньому оновлення бібліотеки підтримки додасть прокладки.

Цей потік reddit відстежує згадане оновлення.

Редагувати

Нова бібліотека дизайну підтримки фактично створює прокладки для плаваючої кнопки дії.


2
Це все ще не працює правильно? Що саме таке "прокладки" :)?
Деніел Вілсон,

6
@DanielWilson шим - це обхідний шлях ( en.wikipedia.org/wiki/Shim_(computing) ). Оскільки тіні є рідними в 5.0, вам потрібна шима для <5.0
Derk-Jan

Дуже цікаво дякую :) Ну, сподіваємось, інженери не відмовляться від цього для старих пристроїв. Я волів би не робити цього сам: D
Деніел Вілсон

@DanielWilson, чесно кажучи: Material Design є частиною покоління 5.0+. Насправді не має сенсу мати його перед льодяником. Я думаю, що відсутність рендереда є причиною того, чому він не буде підтриманий.
Дерк-Січ

@ Derk-Jan, на жаль, Android 5 становить <2% частки ринку навіть через кілька місяців після того, як ви написали про це
Грег Енніс

64

Ось приклад того, як додати тінь нижче Toolbarна пристроях перед льодяником:

введіть тут опис зображення

Макет повинен бути таким:

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

І тінь така:

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

1
Ви можете надати інформацію про - android: layout_height = "@ dimen / toolbar_shadow"
Ранджит Кумар

2
це розмір тіні, вище значення, більш "
підняте

Відповідно до значення, вибраного на веб-сайті дизайну Google, кінцевий колір повинен бути # 45000000. Однак це залежить від того, де вартість придбана в будь-якому випадку.
Цікавий Сем

Таке просте рішення. Дякую!
BK

48

Я досягаю того ж ефекту, використовуючи,

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

Мій тестований результат:

введіть тут опис зображення

посилання - https://stackoverflow.com/a/25683148/3879847

Оновлення: Якщо ви хочете змінити колір цього малюваного малюнка, спробуйте відповідь @Irfan

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


1
Я використав цей трюк для адаптера RecyclerView і чудово працював. Дякую, що поділились!
Альберто Гаона,

Як це зробити для AlertDialog? У мене є стиль, який застосовується до діалогового вікна, тому я додав туди згаданий атрибут, але це виглядає дивно. Схоже, я додав декілька аркушів / шарів як тло. Будь-яка підказка?
cgr

Використання системних ресурсів, таких як @android: drawable / dialog_holo_light_frame, небезпечно, чи не так? Деякі виробники мобільних пристроїв можуть замінити системні ресурси, тому ці ресурси можуть відображатися по-різному на різних пристроях, чи не так?
П. Ільїн

Я використовую цей ресурс більше 2 років .. Тим не менше, я не отримую жодних проблем .. Він працює в Samsung, Asus, Nexus, moto .. І Lenovo також ..
Ранджит Кумар,

-4

Тепер ви можете використовувати схему xmlns:app="http://schemas.android.com/apk/res-auto"іapp: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">

для перегляду повинен використовувати appcompact, наприклад 'android.support.v7.widget.AppCompatTextView'
abbasalim
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.