Android新特性之CardView的简单使用

我们学习下Android5.0的新增加的控件CardView.首先我们了解一下CardView的基本使用,然后结合RecycleView使用CardView进行填充写个消例子。

环境配置

在Android Studio中进行使用,我们只需要在Gradle中添加CardView包的依赖即可使用。

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

基本使用

CardView是一个新增加的UI控件,我们先在代码中定义一个CardView的变量,然后查看源码这是什么。

public class CardView extends FrameLayout implements CardViewDelegate{

...

}

从源码看,CardView继承FrameLayout,所以CardView是一个ViewGroup,我们可以在里面添加一些控件进行布局。既然CardView继承FrameLayout,而且Android中早已有了FrameLayout布局,为什么还有使用CardView这个布局控件呢?我们先来看看官网对此类的注释

A FrameLayoutwiths

rounded corner background and

shadow.

这个FrameLayout特殊点就是有rounded corenr(圆角)和shadow(阴影),这个就是它的特殊之处,回首往日,

我们需要自定义shape文件进行实现圆角和阴影的设计,现在google的大牛已经把它设计为CardView的属性供

我们设置进行使用。下面我们看看CardView新增加了哪些属性:

·CardView_cardBackgroundColor 设置背景色

·CardView_cardCornerRadius 设置圆角大小

·CardView_cardElevation 设置z轴阴影

·CardView_cardMaxElevation 设置z轴最大高度值

·CardView_cardUseCompatPadding是否使用CompadPadding

·CardView_cardPreventCornerOverlap 是否使用PreventCornerOverlap

·CardView_contentPadding 内容的padding

·CardView_contentPaddingLeft 内容的左padding

·CardView_contentPaddingTop 内容的上padding

·CardView_contentPaddingRight 内容的有padding

·CardView_contentPaddingBottom 内容的底padding

card_view:cardUseCompatPadding 设置内边距,V21 + 的版本和之前的版本仍旧具有一样的计算方式

card_view:cardPreventConrerOverlap 在V20和之前的版本中添加内边距,这个属性是为了防止内容和边角的重叠

下面开始简单的使用:

1.普通使用效果

  <android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"> <TextView
android:layout_width="match_parent"
android:layout_height="70dp"
android:text="正常使用效果"
android:gravity="center_horizontal|center_vertical"
android:textColor="#000000"
android:textSize="20sp"
android:padding="10dp"
android:layout_margin="10dp"/>
</android.support.v7.widget.CardView>

效果图:

2.添加背景色和圆角的效果,注意我们此时使用background属性是没效果的:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardBackgroundColor="#669900"
app:cardCornerRadius="10dp"
xmlns:android="http://schemas.android.com/apk/res/android"> <TextView
android:layout_width="match_parent"
android:layout_height="70dp"
android:text="设置背景和标签"
android:gravity="center_horizontal|center_vertical"
android:textColor="#000000"
android:textSize="20sp"
android:padding="10dp"
android:layout_margin="10dp"/>
</android.support.v7.widget.CardView>

效果图:

3.设置z轴阴影

app:cardElevation="20dp"

效果图:



通过上面的演示,我们发现CardView的卡片布局效果很不错,如果用在ListView、RecycleView中一定也有很不错的效果,那么我们现在来使用下。

注意:使用RecycleView,别忘了添加依赖

compile 'com.android.support:recyclerview-v7:24.2.1'

首先定义RecycleView的item的布局:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardBackgroundColor="#80cbc4"
app:cardCornerRadius="10dp"
app:cardPreventCornerOverlap="true"
app:cardUseCompatPadding="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:padding="5dp">
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:scaleType="centerCrop" />
<TextView
android:clickable="true"
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:gravity="right|bottom"
android:textColor="@android:color/white"
android:textSize="24sp" />
</RelativeLayout>
</android.support.v7.widget.CardView>

然后定义一个交互的实体:

public class ImageInfor {

        private String name;
private int imageId; public ImageInfor(int imageId, String name) {
this.imageId = imageId;
this.name = name;
} public int getImageId() {
return imageId;
} public void setImageId(int imageId) {
this.imageId = imageId;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

然后我们直接在MainActivity中进行处理

public class MainActivity extends Activity {

    private RecyclerView mRecyclerView;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
List<ImageInfor> list = new ArrayList<>();
list.add(new ImageInfor(R.mipmap.ic_launcher, "蔡依林"));
list.add(new ImageInfor(R.mipmap.ic_launcher, "林心如"));
list.add(new ImageInfor(R.mipmap.ic_launcher,"蔡依林"));
list.add(new ImageInfor(R.mipmap.ic_launcher, "林心如"));
list.add(new ImageInfor(R.mipmap.ic_launcher,"蔡依林"));
list.add(new ImageInfor(R.mipmap.ic_launcher, "林心如"));
RecyclerView.LayoutManager manager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(manager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
MyAdapter myAdapter = new MyAdapter(list);
mRecyclerView.setAdapter(myAdapter);
myAdapter.setOnItemClick(new MyAdapter.OnItemClick(){
@Override
public void onItemClick(View view, int position) {
Toast.makeText(getApplication(),"点击了:" + position,Toast.LENGTH_SHORT).show();
}
}); } static class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
private List<ImageInfor> list;
public MyAdapter(List<ImageInfor> list){
this.list = list;
} @Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.carditem,viewGroup,false);
return new MyViewHolder(view);
} @Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
myViewHolder.iv_backgroud.setBackgroundResource(list.get(i).getImageId());
myViewHolder.tv_title.setText(list.get(i).getName());
final int position = i;
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(onItemClick != null){
onItemClick.onItemClick(view,position);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView iv_backgroud;
private TextView tv_title;
public MyViewHolder(View itemView) {
super(itemView);
iv_backgroud = (ImageView) itemView.findViewById(R.id.picture);
tv_title = (TextView) itemView.findViewById(R.id.name);
}
}
public interface OnItemClick {
void onItemClick(View view, int position);
}
private OnItemClick onItemClick;
public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}
}
}

使用就是RecycleView的简单使用中的讲解,我们只是把itemview换成cardview.直接看效果图吧!



想要源码可以直接留言。可以直接给你。代码也都在上面了

源码下载地址:https://download.csdn.net/download/heishuai123/10399363

Android新特性之CardView的简单使用的更多相关文章

  1. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...

  2. Android新特性--ConstraintLayout完全解析

    Android新特性--ConstraintLayout完全解析 本篇文章的主题是ConstraintLayout.其实ConstraintLayout是Android Studio 2.2中主要的新 ...

  3. android 5.0新特性学习--CardView

    CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影.CardView是一个Layout,可以布局其他View. 官网地址:https://de ...

  4. 《Android进阶之光》--Android新特性

    Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...

  5. Android新特性介绍,ConstraintLayout完全解析

    今天给大家带来2017年的第一篇文章,这里先祝大家新年好. 本篇文章的主题是ConstraintLayout.其实ConstraintLayout是Android Studio 2.2中主要的新增功能 ...

  6. 转:Android新特性介绍,ConstraintLayout完全解析

    转:http://blog.csdn.net/guolin_blog/article/details/53122387 本篇文章的主题是ConstraintLayout.其实ConstraintLay ...

  7. [Android 新特性] Android 4.3新功能(正式发布前)

    腾讯数码讯(编译:徐萧梓丞)虽然谷歌公司目前尚未正式对外发布最新的Android 4.3果冻豆操作系统,但是在上周我们已经看到了关于三星正 在为原生版Galaxy S4进行Android 4.3系统进 ...

  8. [Android 新特性] 改进明显 Android 4.4系统新特性解析

    Android 4.3发布半年之后,Android 4.4随着新一代Nexus5一起出现在了用户的面前,命名为从之前的Jelly Bean(果冻豆)换成了KitKat(奇巧).这个新系统究竟都有怎样的 ...

  9. [Android 新特性] 15项大改进 Android 4.4新特性解析

    腾讯数码讯(编译:刘沙) 终于,Android系统迎来了久违的重大更新——Android 4.4 KitKat,并与新旗舰Nexus 5同时问世.那么,新的系统究竟都有怎样的改进.是否值得升级呢,下面 ...

随机推荐

  1. 爬虫工程师常用的 Chrome 插件

    做多了爬虫都知道,写一个爬虫大部分时间不是在代码上,而是在分析网页上,所有有一套好用的工具可以极大节省劳动力,这里把平时积累的一些 Chrome 插件分享出来,均来自本人和同事推荐,并不定时更新,欢迎 ...

  2. Android stadio 调试太掉了

    1.evalute expresstion 可以看任何变量的任何属性,就算是一个字符串url,你可以url.length(),你不用输入完就有提示.对象的方法有提示! 2.调试技巧 就是当一行里面有很 ...

  3. 非常全面的vim配置文件

    1.mac下vim全局配置目录 /usr/share/vim/vimrc 一般不对此文件做修改,在用户目录下创建自定义配置,目录为: /Users/xxxxx cd ~ 2自定义vim配置 配置功能: ...

  4. python 学习分享-函数篇2

    递归 自己玩自己的函数: 1. 必须有一个明确的结束条件 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3. 递归效率不高,递归层次过多会导致栈溢出 递归例子和二分查找都放在里面了 ...

  5. php 判断一个点是否在一个多边形区域内

    <?php class pointMap{ private static $coordArray; private static $vertx = []; private static $ver ...

  6. 6个超实用的PHP代码片段

    一.黑名单过滤 function is_spam($text, $file, $split = ':', $regex = false){ $handle = fopen($file, 'rb'); ...

  7. 【bzoj3879】SvT 后缀数组+倍增RMQ+单调栈

    题目描述 (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示), ...

  8. [LOJ#2329]「清华集训 2017」我的生命已如风中残烛

    [LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...

  9. [NOI2009] 植物大战僵尸 [网络流]

    题面: 传送门 思路: 这道题明显可以看出来有依赖关系 那么根据依赖(保护)关系建图:如果a保护b则连边(a,b) 这样,首先所有在环上的植物都吃不到,被它们间接保护的也吃不到 把这些植物去除以后,剩 ...

  10. BZOJ 4175 小G的电话本 ——NTT

    后缀自动机统计出现了各种次数的串的和. 就是所谓的生成函数 然后FFT卷积即可. 卷积快速幂$n\log n \log n$ 注意一下实现,可以少两次NTT #include <map> ...