"丑"预先棒棒糖设备上的CardView

时间:2017-02-22 10:54:14

标签: android material-design android-cardview

我使用CardView作为RecyclerView的自定义项。它们在Android 5+上看起来很不错,但在较旧的Android版本上看起来很不一样。

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

有没有办法在Lollipop前设备上实现Android 5+行为?

1 个答案:

答案 0 :(得分:2)

使用支持CardView?否。

我个人认为支持CardView已被破坏,根本不应该使用。它在Lollipop和旧系统上的外观和工作方式略有不同。阴影是不同的,填充是不同的,内容剪辑不适用于前Lollipop设备等.API也很奇怪和混乱。这就是为什么在所有平台上都难以取得好成绩的原因。如果你可以没有卡,我就会这样。

当然可以创建一个自定义,漂亮,向后兼容的卡,但它有点复杂的任务。要自己创建一张卡,你必须实现:

  • 内容剪裁的圆角(在支持CardView中无效)。 Here's how to do it properly
  • 在卡外部绘制的阴影(不在内部,如支持CardView)。这个取决于您的需求。我会在父容器中覆盖drawChild(...),在那里我可以自由地在卡片周围绘制阴影。阴影生成方法并不重要 - 它可以是渐变,静态9补丁或RenderScript模糊的黑色形状。

我对CardView的外观和API感到沮丧,所以我创建了自己的实现。它可以在GitHub上找到 - 该库名为Carbon,使用它可能是获得一张像样卡的最简单方法。导入库后,只需将style="?attr/carbon_cardViewStyle"添加到任何布局中,使其看起来像卡片:

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