My Cardview внутри Listview не показывает тень в Android L (Nexus 5). Кроме того, округлые края не отображаются должным образом. Вот код для представления адаптера Listview:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="@android:color/white"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="4dp"
app:cardElevation="4dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="@dimen/padding_small"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ImageView
android:id="@+id/ivPicture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvName"
android:layout_centerHorizontal="true"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/tvDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ivPicture"
android:layout_centerHorizontal="true"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" />
</RelativeLayout>
</android.support.v7.widget.CardView>
И ListView xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/app_bg" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:cacheColorHint="#00000000"
android:divider="@android:color/transparent"
android:drawSelectorOnTop="true"
android:smoothScrollbar="true" />
<ProgressBar
android:id="@+id/progressBarMain"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone" /></RelativeLayout>
Он отлично работает на устройствах pre-L с правильной тенью и закругленными углами. Но не работает на устройстве Android L. Можете ли вы сказать, что мне здесь не хватает?
Ответы:
После повторного просмотра документации я наконец нашел решение.
Просто добавьте
card_view:cardUseCompatPadding="true"
к своему,CardView
и на устройствах Lollipop появятся тени.Что происходит, так это то, что область содержимого
CardView
принимает разные размеры на устройствах pre-lollipop и lollipop. Таким образом, в устройствах с леденцами тень на самом деле закрывается картой, поэтому ее не видно. При добавлении этого атрибута область содержимого остается одинаковой на всех устройствах, и тень становится видимой.Мой xml-код выглядит так:
источник
card_view:cardElevation="2sp"
наcard_view:cardElevation="2dp"
?sp
следует использовать только для размеров текста.dp
следует использовать для всех остальных размеров.Не забывайте, что для рисования тени необходимо использовать
hardwareAccelerated
рисунок.hardwareAccelerated = true
hardwareAccelerated = false
См Android аппаратное ускорение для получения подробной информации
источник
используйте
app:cardUseCompatPadding="true"
внутри вашего cardview. Напримеристочник
check hardwareAccelerated в манифесте делает его истинным, делая false, удаляет тени, когда ложная тень появляется в предварительном просмотре xml, но не в телефоне.
источник
Добавьте эту строку в CardView ....
подсказки
Вы можете избежать layout_marginTop и layout_marginBottom, поскольку сама тень занимает некоторое пространство вверх и вниз. Объем пространства определяется тем, сколько вы будете использовать в card_view: cardElevation = "ndp".
Счастливого кодирования (:
источник
Наконец, я смог получить тени на устройстве Lollipop, добавив поля в вид карты. Вот окончательный макет карты:
источник
8dp
достаточно?Просто добавьте эти теги:
Итак, это стало:
источник
Вы можете добавить эту строку кода для тени в виде карты
Ниже у вас есть пример
Надеюсь это поможет!
источник
Вы можете попробовать, добавив эту строку
Весь код будет выглядеть так
источник
В моем случае тень не отображалась на устройствах Android L, потому что я не добавлял маржу. Проблема в том, что CardView автоматически создает этот запас на <5 устройствах, поэтому теперь я делаю это так:
источник
Добавьте android: hardwareAccelerated = "true" в свой файл манифестов, как показано ниже, у меня работает
источник
Прежде всего убедитесь, что следующие зависимости правильно добавлены и скомпилированы в файле build.gradle
и после этого попробуйте следующий код:
проблема возникает в Android L из-за того, что атрибут layout_margin не добавлен
источник
Мой recyclerview загружался медленно, поэтому, прочитав stackoverflow.com, я изменил hardwareAccelerated на «false», тогда высота не отображается на устройстве. Я вернулся к истине. Меня устраивает.
источник
Карточный просмотр не может отображать тень, потому что вы
RelativeLayout
находитесь в тени карточного просмотра. Чтобы показать тень, добавьте поля в представление карты. Например:источник
Я думаю, если вы сначала проверите свой манифест, если вы написали,
android:hardwareAccelerated="false"
вы должны сделать егоtrue
тени для карты Как этот ответ здесьисточник
Проверьте вы не используете
android:layerType="software"
в вашем RecyclerView .Изменив его, я
android:layerType="hardware"
решил проблему.источник
переместите свой атрибут «uses-sdk» в верхнюю часть манифеста, как в ответе ниже https://stackoverflow.com/a/27658827/1394139
источник