У меня есть ListView, и с каждым элементом списка я хочу, чтобы он показывал тень под ним. Я использую новую функцию повышения Android Lollipop, чтобы установить Z на представлении, для которого я хочу отбросить тень, и уже эффективно делаю это с ActionBar (технически панель инструментов в Lollipop). Я использую высоту Lollipop, но по какой-то причине она не показывает тень под элементами списка. Вот как настроен макет каждого элемента списка:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
style="@style/block"
android:gravity="center"
android:layout_gravity="center"
android:background="@color/lightgray"
>
<RelativeLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:elevation="30dp"
>
<ImageView
android:id="@+id/documentImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/alphared"
android:layout_alignParentBottom="true" >
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="light"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingBottom="4dp"
android:singleLine="true"
android:text="New Document"
android:textSize="27sp"/>
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentPageCount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="italic"
android:paddingLeft="16dp"
android:layout_marginBottom="16dp"
android:text="1 page"
android:textSize="20sp"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
Однако вот как он показывает элемент списка, без тени:
Я также попробовал следующее безрезультатно:
- Установите высоту для самих ImageView и TextViews вместо родительского макета.
- Применил фон для ImageView.
- Используется TranslationZ вместо возвышения.
Ответы:
Я немного поигрался с тенями на Lollipop, и вот что я нашел:
ViewGroup
границы родителя по какой-то причине отсекают тень его детей; иandroid:elevation
, обрезаютсяView
границами, а не границами, простирающимися через границы;android:clipToPadding="false"
для этого родителя.Вот мое предложение для вас на основе того, что я знаю:
RelativeLayout
чтобы отступы были равны полям, установленным для относительного макета, для которого вы хотите показать тень;android:clipToPadding="false"
на то же самоеRelativeLayout
;RelativeLayout
что также имеет набор высоты;В конце дня ваш относительный макет верхнего уровня должен выглядеть следующим образом:
Относительная внутренняя планировка должна выглядеть так:
источник
Если у вас есть вид без фона, эта строка поможет вам
По умолчанию тень определяется фоном вида, поэтому, если фон отсутствует, тени также не будет.
источник
<solid>
.none
. Спасибо!По-видимому, вы не можете просто установить высоту в представлении, чтобы оно появилось. Вам также необходимо указать фон.
Следующие строки, добавленные в мой LinearLayout, наконец-то показали тень:
источник
еще одна вещь, о которой вы должны знать, тени не будут отображаться, если у вас есть эта строка в манифесте:
андроид: hardwareAccelerated = "ложь"
Я перепробовал все предложенные материалы, но это сработало только для меня, когда я удалил строку, потому что у меня была строка, потому что мое приложение работало с несколькими растровыми изображениями, и они вызывали сбой приложения.
источник
android:clipToPadding="false"
с этим решением.Если у вас есть вид без фона, эта строка поможет вам
Если у вас есть вид с фоном, эта строка поможет вам
источник
android:outlineProvider="paddedBounds"
эта линия работала для меня. Я установил селектор Drawable.Если вы добавляете высоту к элементу кнопки, вам необходимо добавить следующую строку:
См. Android 5.0 android: высота работает для просмотра, но не кнопка?
источник
Тьфу, просто провел час, пытаясь понять это. В моем случае у меня был установлен фон, но он был установлен на цвет. Этого недостаточно, вам нужно установить фон вида для рисования.
Например, это не будет иметь тени:
но это будет
РЕДАКТИРОВАТЬ: Также обнаружили, что если вы используете селектор в качестве фона, если у вас не установлен угол, тень не будет отображаться в окне предварительного просмотра, но будет отображаться на устройстве
Например, у этого нет тени в предварительном просмотре:
но это делает:
источник
Добавление цвета фона помогло мне.
источник
Иногда нравится
background="@color/***"
илиbackground="#ff33**"
не работает, заменяюbackground_color
на drawable, потом работаетисточник
Если это все еще не показывает высоту, попробуйте
это определенно поможет вам.
источник
Если вы хотите иметь прозрачный фон и у
android:outlineProvider="bounds"
вас не работает, вы можете создать собственный ViewOutlineProvider:И установите для этого провайдера прозрачный вид:
Источники: https://code.google.com/p/android/issues/detail?id=78248#c13
[РЕДАКТИРОВАТЬ] Документация Drawable.getAlpha () говорит, что это зависит от того, как Drawable угрожает альфа. Вполне возможно, что он всегда будет возвращать 255. В этом случае вы можете указать альфа вручную:
Если фон вашего представления является StateListDrawable с цветом по умолчанию # DDFF0000, то есть с альфа-каналом DDx0 / FFx0 == 0,86
источник
дать немного цвета фона, чтобы макет работал для меня, как:
источник
Мне повезло с настройкой
clipChildren="false"
родительского макета.источник
Я потратил некоторое время на работу над ним и, наконец, понял, что когда фон темный, тени не видно
источник
В дополнение к принятому ответу есть еще одна причина, из-за которой повышение может работать не так, как ожидается, если на телефоне включена функция фильтра Bluelight.
Я столкнулся с этой проблемой, когда в моем устройстве высота была совершенно искаженной и невыносимой. Но высота была хороша в предварительном просмотре. Отключение фильтра Bluelight на телефоне решило проблему.
Так что даже после настройки
Высота не работает должным образом, то вы можете попытаться повозиться с настройками цвета телефона.
источник
Я полагаю, что ваша проблема связана с тем, что вы применили элемент высот к относительной компоновке, которая заполняет его родительский элемент. Его родитель обрезает все дочерние виды в пределах своего собственного холста для рисования (и является видом, который обрабатывает тень дочернего элемента). Вы можете исправить это, применив свойство возвышения к верхнему элементу
RelativeLayout
вашего XML-представления (корневой тег).источник
В моем случае шрифты были проблемой.
1) Без
fontFamily
меня нужно было установитьandroid:background
какое-то значение.2) с
fontFamily
меня пришлось добавитьandroid:outlineProvider="bounds"
настройку:источник
В моем случае это было вызвано тем, что пользовательский родительский компонент установил тип слоя рендеринга в «Программное обеспечение»:
Удаление этой строчки сделало свое дело. Или, конечно, вы должны оценить, почему это происходит в первую очередь. В моем случае это была поддержка Honeycomb, которая значительно отстает от текущего минимального SDK для моего проекта.
источник
Также проверьте, если вы не измените альфа в этом представлении. Я исследую проблему, когда я изменяю альфу на некоторых видах с возвышением. Они просто теряют высоту, когда альфа меняется и возвращается обратно к 1f.
источник