2017-02-22 34 views
1

Я использую CardView как пользовательский элемент для RecyclerView. Они хорошо смотрятся на Android 5+, но настолько отличаются от старых версий Android.«Ugly» CardView на устройствах Pre-Lollipop

на Android 5 + enter image description here

На Android enter image description here

Код тот же:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:minHeight="?android:attr/listPreferredItemHeight" 
card_view:cardCornerRadius="1dp" 
card_view:cardElevation="1dp"> 

... other items ... 

</android.support.v7.widget.CardView> 

Есть ли способ добиться поведения Андроида 5+ на предварительно -Lollipop устройства?

ответ

1

Использование карты поддержки CardView? №

Лично я считаю, что поддержка CardView повреждена и не должна использоваться вообще. Он выглядит и работает немного по-другому на Lollipop и на старых системах. Тень различна, отступы различны, обрезка содержимого не работает на устройствах до Lollipop и т. Д. API также странный и запутанный. Вот почему трудно получить хорошие результаты на всех платформах. Если вы можете жить без карточек, я бы пошел именно так.

Конечно, возможно создать обычную, красивую, обратную совместимую карту, но это немного сложная задача. Чтобы создать карточку самостоятельно, вам необходимо выполнить:

  • округлые углы с обрезкой содержимого (не работает в поддержке CardView). Here's how to do it properly.
  • тени, нарисованные вне карты (не внутри, как поддержка CardView). Это зависит от ваших потребностей. Я бы переопределил drawChild(...) в родительском контейнере, где я мог легко рисовать тени вокруг карт. Метод генерации тени не имеет значения - это может быть градиент, статический 9-патч или размытая черная форма RenderScript.

Я был расстроен внешним видом и API CardView, поэтому я создал свою собственную реализацию. Его можно найти на GitHub - библиотека называется Carbon, и использовать ее, вероятно, самый простой способ получить приличную карту. После импорта библиотеки просто добавьте style="?attr/carbon_cardViewStyle" в любой макет, чтобы он выглядел как карта:

<carbon.widget.RelativeLayout 
    style="?attr/carbon_cardViewStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

 Смежные вопросы

  • Нет связанных вопросов^_^