2017-02-22 88 views
1

我使用CardView作为RecyclerView的自定义项目。它们在Android 5+上看起来不错,但在较旧的Android版本上却很不一样。Pre-Lollipop设备上的“丑陋”CardView

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

有没有办法实现了Android 5+预行为 - 棒棒糖设备?

回答

1

使用支持CardView?编号

就我个人而言,我认为支持CardView是坏的,不应该使用。它看起来和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"/>