Android CardView的使用

作者: Galaxy北爱 | 来源:发表于2016-12-09 11:18 被阅读558次

CardView是android5.0以上的新控件,卡片式布局,继承FrameLayout实现,今天这里主要说一下CardView的使用和注意的地方
1.首先肯定需要引用gradle配置

compile'com.android.support:cardview-v7:21.0.+'

介绍一下主要的属性:
app:cardBackgroundColor这是设置背景颜色
app:cardCornerRadius设置圆角大小
app:cardElevation设置z轴的阴影
app:cardMaxElevation设置z轴的最大高度值
app:contentPadding 设置内容的内边距
app:contentPaddingLeft 设置内容的左内边距
app:contentPaddingTop 设置内容的上内边距
app:contentPaddingRight 设置内容的右内边距
app:contentPaddingBottom 设置内容的底内边距
具体的效果根据需求进行测试吧。
我们今天主要记录一下跳过使用这个东西的一些火坑
这玩意是5.0+上发布的 所以根据平时的习惯做出来以后再5.0+上的手机上运行很完美,根本看不出来问题。
但是有一天我用cardView+listView写好以后再4.4的一个机子上运行后发现cardview的外边距(layout_margin)很大。第一反应 肯定是兼容出问题咯,果然发现在低版本中设置了 CardElevation 之后 CardView 会自动留出空间供阴影显示,而 Lollipop 之后则需要手动设置 Margin 边距来预留空间,导致我在设置 Margin 在 Android 5.0 机器上运行后发现 Kitkat 机器调试时发现边距非常大,严重地浪费了屏幕控件而且还很丑。
找到问题就好说,解决方案就很明确了:

1.在res下创建values(默认已经存在)和一个values-v21的文件夹并且在两个文件下创建dimens.xml文件
2.dimens.xml文件中自定义一个dimen
values-v21文件夹下

<dimen name="cardView_m">10dp</dimen>

values文件夹下

<dimen name="cardView_m">0dp</dimen>

因为在低版本下设置CardElevation后默认就有了边距,所以这里我们就不要在设置边距了,不然会叠加导致低版本外边距很大
3.只需要在CardView下设置

android:layout_margin="@dimen/cardView_m"

这样就可以根据自己的需求可以调整出自己想要的距离

--------------------华丽丽的分割线----------------------

好吧,再说一下CardView上的按下,点击的效果实现。你以为还是跟正常的background设置一下就好了?如果真这样,那就可以不用说了,很明显不是。

foreground:通过这个东西来设置点击的效果实现

android:foreground="?attr/selectableItemBackground"

但是很尴尬,这个只能支持5.0+上的版本,低版本看着很low,有点生硬,所以还是自己动手才是王道,下面我提供一下自己实现的点击效果:

1.创建drawable和drawable-v21文件夹,并且实现以下的一个select_card_foreground.xml文件
drawable-v21文件夹下
select_card_foreground.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#20000000"
    android:drawable="@drawable/card_foreground_selector" />

card_foreground_selector.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/color_d2d2d2"/>
        </shape>
    </item>
    <item android:state_focused="true" android:state_enabled="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/color_d2d2d2"/>
        </shape>
    </item>
</selector>

drawable文件夹下
select_card_foreground.xml

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/card_foreground_selector"
    android:insetLeft="2dp"
    android:insetRight="2dp"
    android:insetTop="4dp"
    android:insetBottom="4dp"/>```
card_foreground_selector.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/transparent_1"/>
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="@color/transparent_1"/>
</shape>
</item>
</selector>```
最后在CardView设置:

android:foreground="@drawable/select_card_foreground"

最后就能完美使用了。

相关文章

网友评论

  • 降灵:listview 中的card怎么设置itemclick ?🤔🤔🤔
    降灵:@Galaxy北爱 嗯嗯,谢谢
    Galaxy北爱:@caa49928d34d CardView就是一个卡片容器控件,本身是不带有抢占焦点的属性,所以在listview的item中和正常的控件一样,如果你的item无法点击,看看容器是否有其他抢占焦点的控件。

本文标题:Android CardView的使用

本文链接:https://www.haomeiwen.com/subject/lmsemttx.html