android MaterialDesign之CardView
来源:互联网 发布:商城源码单用户版 编辑:程序博客网 时间:2024/05/17 09:09
android MaterialDesign是google5.0新推出的一种规范,提供了很多资源文件以及新控件。 这篇博文主要讲CardView的使用。
CardView是一种卡片式布局,一种新型的布局,效果简约美观。以下是CardView的继承体系:
java.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.widget.FrameLayout ↳android.support.v7.widget.CardView使用CardView需要导入 相对应的包。 如果是gradle那就比较简单,根据自己sdk的版本导入相对应的包
compile 'com.android.support:cardview-v7:23.3.0'
在eclipse则需要 引入架包或者cardview的jar文件
先贴上xml的布局代码<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" app:cardBackgroundColor="@android:color/holo_blue_dark" app:cardCornerRadius="5dp" app:cardElevation="@dimen/cardview_default_elevation" app:cardUseCompatPadding="true" android:clickable="true" android:foreground="?attr/selectableItemBackground" app:contentPadding="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/item_icon" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@mipmap/img1" /> <TextView android:id="@+id/item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="内容标题" android:textColor="#fff" android:textSize="16sp" /> <TextView android:id="@+id/item_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:ellipsize="end" android:lines="2" android:maxLines="2" android:text="@string/content" android:textColor="#fff" android:textSize="16sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="horizontal"> <ImageView android:id="@+id/item_dw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1" android:src="@mipmap/dw" /> <ImageView android:id="@+id/item_ss" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1" android:src="@mipmap/search" /> <ImageView android:id="@+id/item_fx" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:src="@mipmap/fx" /> </LinearLayout> </LinearLayout></android.support.v7.widget.CardView>从上面的xml布局看出来使用还是很简单的,直接当做普通的布局容器来使用就行了。
cardBackgroundColor -----》 设置cardview背景颜色
cardCornerRadius -----》设置cardview 圆角的半径
cardElevation----》设置cardview的阴影
contentPadding-----》设置cardview的内间距
5.x上面可以设置点击水波纹效果
android:foreground="?attr/selectableItemBackground"
cardPreventCornerOverlap ------》防止api20之前圆角与内容重叠 ,在21以后不会重叠
cardUseCompatPadding ----》设置为true 可以为不同L版提供内间距兼容 ,默认为false
更详细的请查阅android api文档
http://android.xsoftlab.net/reference/android/support/v7/widget/CardView.html
MainActivity代码
package com.ysm.cardview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.support.v7.widget.Toolbar;import android.view.View;import android.widget.Toast;import com.ysm.cardview.adapter.RecyAdapter;import com.ysm.cardview.bean.Card;import com.ysm.cardview.listener.ICardItemCallback;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private RecyAdapter mAdapter; private int[] icons = new int[]{R.mipmap.img1, R.mipmap.img2, R.mipmap.img3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); mRecyclerView = (RecyclerView) findViewById(R.id.recy_cardview); setSupportActionBar(toolbar);// FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);// fab.setOnClickListener(new View.OnClickListener() {// @Override// public void onClick(View view) {// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)// .setAction("Action", null).show();// }// }); initData(); initListener(); } //初始化数据 private void initData() { List<Card> mDatas = new ArrayList<>(); Card card1 = new Card(icons[0], "titile1", getString(R.string.content), 1); Card card2 = new Card(icons[1], 2); Card card3 = new Card(icons[2], "titile3", getString(R.string.content), 1); Card card4 = new Card(icons[0], "titile4", getString(R.string.content), 1); Card card5 = new Card(icons[1], "titile5", getString(R.string.content), 1); Card card6 = new Card(icons[2], 2); mDatas.add(card1); mDatas.add(card2); mDatas.add(card3); mDatas.add(card4); mDatas.add(card5); mDatas.add(card6); //设置适配器 mAdapter = new RecyAdapter(mDatas, this); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); } //item点击事件 private void initListener() { mAdapter.setOnCardViewListener(new ICardItemCallback() { @Override public void onCardItemClick(View v, int position) { Toast.makeText(MainActivity.this, "item" + position, Toast.LENGTH_SHORT).show(); } }); }}adapter代码
package com.ysm.cardview.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.ysm.cardview.R;import com.ysm.cardview.bean.Card;import com.ysm.cardview.listener.ICardItemCallback;import java.util.List;/** * adapter */public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.RecyHodler> { private List<Card> mDatas; private Context mContext; private LayoutInflater mInflater; private final int TYPE_A = 1; private final int TYPE_B = 2; private int TYPE; private ICardItemCallback callback; public void setOnCardViewListener(ICardItemCallback callback) { this.callback = callback; } public RecyAdapter(List<Card> datas, Context context) { this.mDatas = datas; this.mContext = context; mInflater = LayoutInflater.from(context); } @Override public RecyHodler onCreateViewHolder(ViewGroup parent, int viewType) { RecyHodler hodler; if (viewType == TYPE_A) { hodler = new RecyHodler(mInflater.inflate(R.layout.recy_item_cardview, parent, false)); return hodler; } else { hodler = new RecyHodler(mInflater.inflate(R.layout.recy_item_cardview2, parent, false)); return hodler; } } @Override public void onBindViewHolder(final RecyHodler holder, int position) { Card item = mDatas.get(position); if (TYPE == TYPE_A) { holder.icon.setImageResource(item.getIcon()); holder.title.setText(item.getTitle()); holder.content.setText(item.getContent()); } else if (TYPE == TYPE_B) { holder.icon.setImageResource(item.getIcon()); } if (callback != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int item = holder.getLayoutPosition(); callback.onCardItemClick(v, item); } }); } } @Override public int getItemViewType(int position) { int type = mDatas.get(position).getType(); if (type == 1) { TYPE = TYPE_A; return TYPE_A; } else { TYPE = TYPE_B; return TYPE_B; } } @Override public int getItemCount() { return mDatas.size(); } class RecyHodler extends RecyclerView.ViewHolder { ImageView icon; TextView title; TextView content; public RecyHodler(View itemView) { super(itemView); if (TYPE == TYPE_A) { icon = (ImageView) itemView.findViewById(R.id.item_icon); title = (TextView) itemView.findViewById(R.id.item_title); content = (TextView) itemView.findViewById(R.id.item_content); } else { icon = (ImageView) itemView.findViewById(R.id.item_icon2); } } }}通过与RecyclerView的结合使用,实现了照片瀑布流的效果,这里的图片是本地的,并不是网络获取的图片。详情可以查看代码。
先来两张效果图:
源码下载地址
0 0
- android MaterialDesign之CardView
- MaterialDesign——CardView
- android 5.0之cardview
- Android 5.0 之CardView
- Android控件之CardView
- Android学习之CardView
- 一步步走进Android MaterialDesign 之 DrawerLayout
- 一步步走进Android MaterialDesign 之 NavigationView
- 一步步走进Android MaterialDesign 之 TabLayout
- Android开发之MaterialDesign动画总结
- Android 5.0学习之CardView
- android之CardView的使用
- Android 5.x之CardView
- Android MD控件之CardView
- Android MD控件之CardView
- Android之RecycleView和CardView
- Android之CardView的使用
- Android Material Design 之 CardView
- 6-1 Verilog Mealy状态机之序列检测器
- 渐进增强
- Altium Designer10中查找元器件的三种方法
- IOS学习 网络HTTP 加密 base64,md5,hamo,时间戳
- 安卓第一篇总结
- android MaterialDesign之CardView
- Dynamics CRM2016 Set Values of all Data Types using Web API
- git用远程仓库强制更新本地修改,本地修改不保存
- Android权限
- python安装mysqldb模块遇到的问题和解决方法
- Solr-5.5 QuickStart
- Java枚举类型小结
- Lucener认识
- SLAM实践(1)