我使用CardView
作为RecyclerView
的自定义项。它们在Android 5+上看起来很不错,但在较旧的Android版本上看起来很不一样。
代码相同:
<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+行为?
答案 0 :(得分:2)
使用支持CardView?否。
我个人认为支持CardView已被破坏,根本不应该使用。它在Lollipop和旧系统上的外观和工作方式略有不同。阴影是不同的,填充是不同的,内容剪辑不适用于前Lollipop设备等.API也很奇怪和混乱。这就是为什么在所有平台上都难以取得好成绩的原因。如果你可以没有卡,我就会这样。
当然可以创建一个自定义,漂亮,向后兼容的卡,但它有点复杂的任务。要自己创建一张卡,你必须实现:
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"/>