当前位置:   article > 正文

Android Material Design之CardView(卡片式布局)_android materialcardview

android materialcardview

目录

1.CardView概念

2.CardView常用属性

3.CardView的使用

3.1 创建CardView

3.2 CardView的使用注意事项

4.CardView案例

4.1 效果图

 4.2 步骤1:在MainActivity.xml中添加ListView

4.3 步骤2:为ListView的item创建布局,并在布局中加入GridView

4.4 步骤3:创建适配器,MsgAdapter.java

4.5 步骤4:创建要展示的内容信息实体类

4.6 步骤5:创建数据工具类,获取内容信息数据

4.7 步骤6:在MainActivity.java进行配置


1.CardView概念

         CardView是Android5.0之后新增的卡片式控件,以往,我们需要自定义Shape来实现圆角和阴影效果;现在,这些效果集成到了CardView的属性里。 实际上,CardView也可以看做是一个FrameLayout继承自FrameLayout,方便作为其他控件容器,提供了圆角和阴影等效果,看上去有立体的感觉。

         使用的时候需要添加依赖库,应该与appcompat-v7保持相同的版本号,避免出现问题。

com.android.support:cardview-v7:版本号

          添加依赖库如下所示:

  1. dependencies {
  2. implementation fileTree(dir: 'libs', include: ['*.jar'])
  3. implementation 'com.android.support:appcompat-v7:28.0.0'
  4. implementation 'com.android.support:cardview-v7:28.0.0'
  5. ......
  6. }

   

2.CardView常用属性

       常用属性如下:

app:cardBackgroundColor设置背景颜色
app:cardCornerRadius设置圆角弧度,数值越大,圆角弧度越大
app:contentPadding设置内容的padding
app:cardElevation设置卡片的高度,越高,投影范围越大,阴影效果越淡;越小,则越浓
app:cardUseCompatPadding

默认为false,表示是否使用CompatPadding,用于5.0以上,true则表示

添加额外的padding绘制阴影

app:cardPreventCornerOverlap

默认为true,表示是否使用CompatPadding,用于5.0以下,true则表示

添加额外的padding,防止内容和圆角重叠

android:foreground可以用来设置点击效果,只在FrameLayout中支持

 

3.CardView的使用

3.1 创建CardView

           CardView的创建需要在布局文件中,可作为其他控件的容器,实例如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. xmlns:app="http://schemas.android.com/apk/res-auto"
  7. android:orientation="vertical"
  8. android:gravity="center">
  9. <!-- 添加CardView -->
  10. <android.support.v7.widget.CardView
  11. app:cardBackgroundColor="#f88cfe"
  12. app:contentPadding="10dp"
  13. app:cardCornerRadius="16dp"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content">
  16. <TextView
  17. android:background="#f50303"
  18. android:layout_width="150dp"
  19. android:layout_height="60dp"
  20. android:text="Hello World!"
  21. android:textSize="20sp"
  22. android:gravity="center"/>
  23. </android.support.v7.widget.CardView>
  24. </LinearLayout>

         效果图如下:

3.2 CardView的使用注意事项

CardView只有cardBackgroundColor设置的背景颜色才会生效background设置的背景颜色不会生效,即便如果cardBackgroundColor没有设置颜色。

 

4.CardView案例

4.1 效果图

 4.2 步骤1:在MainActivity.xml中添加ListView

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:gravity="center">
  7. <ListView
  8. android:id="@+id/listview"
  9. android:divider="@null"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"/>
  12. </LinearLayout>

         注意:这里使用了android:divider="@null",使得item之间的横线被隐藏了。

4.3 步骤2:为ListView的item创建布局,并在布局中加入CardView

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. xmlns:app="http://schemas.android.com/apk/res-auto">
  6. <android.support.v7.widget.CardView
  7. android:id="@+id/cardview"
  8. app:cardCornerRadius="10dp"
  9. app:cardElevation="4dp"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_margin="12dp">
  13. <LinearLayout
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. android:orientation="vertical">
  17. <ImageView
  18. android:id="@+id/imageview"
  19. android:layout_width="match_parent"
  20. android:layout_height="150dp"
  21. android:scaleType="centerCrop"
  22. android:src="@drawable/img05"/>
  23. <TextView
  24. android:id="@+id/title_tv"
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content"
  27. android:layout_margin="8dp"
  28. android:textColor="#000000"
  29. android:textSize="20sp"
  30. android:textStyle="bold"
  31. android:text="这是标题"/>
  32. <TextView
  33. android:id="@+id/content_tv"
  34. android:layout_width="match_parent"
  35. android:layout_height="wrap_content"
  36. android:layout_marginLeft="8dp"
  37. android:layout_marginRight="8dp"
  38. android:layout_marginBottom="8dp"
  39. android:text="这是测试文本"/>
  40. </LinearLayout>
  41. </android.support.v7.widget.CardView>
  42. </FrameLayout>

4.4 步骤3:创建适配器,MsgAdapter.java

  1. public class MsgAdapter extends BaseAdapter{
  2. private List<Msg> mMsgList;
  3. private LayoutInflater mLayoutInflater;
  4. private Context mContext;
  5. public MsgAdapter(List<Msg> msgList, Context context) {
  6. this.mMsgList = msgList;
  7. this.mLayoutInflater = LayoutInflater.from(context);
  8. this.mContext = context;
  9. }
  10. @Override
  11. public int getCount() {
  12. return mMsgList.size();
  13. }
  14. @Override
  15. public Msg getItem(int position) {
  16. return mMsgList.get(position);
  17. }
  18. @Override
  19. public long getItemId(int position) {
  20. return position;
  21. }
  22. @Override
  23. public View getView(int position, View convertView, ViewGroup parent) {
  24. ViewHolder viewHolder = null;
  25. if(convertView == null){
  26. convertView = mLayoutInflater.inflate(R.layout.item_msg,parent,false);
  27. viewHolder = new ViewHolder();
  28. viewHolder.imageView = convertView.findViewById(R.id.imageview);
  29. viewHolder.titleTV = convertView.findViewById(R.id.title_tv);
  30. viewHolder.contentTV = convertView.findViewById(R.id.content_tv);
  31. convertView.setTag(viewHolder);
  32. }else{
  33. viewHolder = (ViewHolder) convertView.getTag();
  34. }
  35. Msg msg = mMsgList.get(position);
  36. viewHolder.imageView.setImageResource(msg.getImageResourceID());
  37. viewHolder.titleTV.setText(msg.getTitle());
  38. viewHolder.contentTV.setText(msg.getContent());
  39. return convertView;
  40. }
  41. private static class ViewHolder{
  42. ImageView imageView;
  43. TextView titleTV;
  44. TextView contentTV;
  45. }
  46. }

4.5 步骤4:创建要展示的内容信息实体类

  1. public class Msg {
  2. private int id;
  3. private int imageResourceID;
  4. private String title;
  5. private String content;
  6. public Msg() {
  7. }
  8. public Msg(int id, int imageResourceID, String title, String content) {
  9. this.id = id;
  10. this.imageResourceID = imageResourceID;
  11. this.title = title;
  12. this.content = content;
  13. }
  14. public int getId() {
  15. return id;
  16. }
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20. public int getImageResourceID() {
  21. return imageResourceID;
  22. }
  23. public void setImageResourceID(int imageResourceID) {
  24. this.imageResourceID = imageResourceID;
  25. }
  26. public String getTitle() {
  27. return title;
  28. }
  29. public void setTitle(String title) {
  30. this.title = title;
  31. }
  32. public String getContent() {
  33. return content;
  34. }
  35. public void setContent(String content) {
  36. this.content = content;
  37. }
  38. }

4.6 步骤5:创建数据工具类,获取内容信息数据

  1. public class MsgUtil {
  2. public static List<Msg> getMsgList(){
  3. List<Msg> msgList = new ArrayList<>();
  4. Msg msg = new Msg(1,R.drawable.img01,
  5. "华为新一代芯片震撼众人,麒麟990颠覆你认知!",
  6. "就在近日,vivo旗下的一款子品牌IQOO在深圳首发了它的第一款新机,该消息一经发布,就引得众人纷纷赶来为了一睹其风采,在当时也引起了各界媒体的关注与争先报道。");
  7. msgList.add(msg);
  8. msg = new Msg(2,R.drawable.img02,
  9. "网络提速降费今年将放出四个大招!",
  10. "今年两会政府工作报告中提出,今年中小企业宽带平均资费再降低15%,移动网络流量平均资费再降低20%以上。随后中国移动、中国电信、中国联通三大运营商作出回应,坚决落实提速降费。");
  11. msgList.add(msg);
  12. msg = new Msg(3,R.drawable.img03,
  13. "【早报】传谷歌第一款智能手表3月或6月上市",
  14. "外媒称,传闻已久的谷歌智能手表确实已经存在,而且谷歌公司预计它将于今年3月中旬至下旬上市。");
  15. msgList.add(msg);
  16. msg = new Msg(4,R.drawable.img04,
  17. "外媒详测:iPhone XS信号真的有问题吗",
  18. "高通在基带芯片上的垄断地位即使是苹果也无法撼动,该交的专利费依旧要交。苹果在今年发布的三款iPhone上,全部采用英特尔的调制解调器和通信芯片,并且苹果今年采用了四天线方案.");
  19. msgList.add(msg);
  20. msg = new Msg(5,R.drawable.img05,
  21. "不仅要卖芯片,英特尔还想做 5G 时代的云端生意",
  22. "上网速度更快,是大部分消费者对于 5G 网络最直观的印象,但和 4G 相比增速是否明显,高速网络又有什么新玩法,在 5G 正式落地前,我们都不好妄加揣测。");
  23. msgList.add(msg);
  24. return msgList;
  25. }
  26. }

4.7 步骤6:在MainActivity.java进行配置

  1. public class MainActivity extends AppCompatActivity {
  2. private ListView listView;
  3. private List<Msg> msgList;
  4. private MsgAdapter adapter;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. listView = findViewById(R.id.listview);
  10. msgList = MsgUtil.getMsgList();
  11. adapter = new MsgAdapter(msgList,this);
  12. listView.setAdapter(adapter);
  13. }
  14. }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/536693
推荐阅读
相关标签
  

闽ICP备14008679号