当前位置: 首页 > article >正文

Android MaterialCardView实战:5分钟搞定商品卡片UI(附完整代码)

Android MaterialCardView实战5分钟搞定商品卡片UI附完整代码在电商应用开发中商品卡片的视觉效果直接影响用户点击率和转化率。MaterialCardView作为Android Material Components库中的明星控件凭借其内置的阴影、圆角和水波纹效果能够快速构建符合Material Design规范的卡片式UI。本文将带你从零开始用最短时间实现一个专业级的商品卡片。1. 环境准备与基础配置首先确保项目已引入Material Components库。在模块级build.gradle文件中添加最新依赖dependencies { implementation com.google.android.material:material:1.9.0 }同步完成后我们创建一个基础的商品卡片布局。MaterialCardView的核心优势在于它预置了符合Material Design规范的视觉效果开发者无需手动实现复杂的阴影和状态动画。2. 商品卡片布局实现2.1 XML布局构建创建一个典型的电商商品卡片需要包含商品图片、名称、价格和收藏按钮。以下是完整的布局代码com.google.android.material.card.MaterialCardView xmlns:androidhttp://schemas.android.com/apk/res/android xmlns:apphttp://schemas.android.com/apk/res-auto android:layout_width160dp android:layout_height240dp android:layout_margin8dp app:cardCornerRadius12dp app:cardElevation4dp app:strokeColorcolor/card_stroke app:strokeWidth1dp app:rippleColorcolor/ripple_light LinearLayout android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical ImageView android:idid/product_image android:layout_widthmatch_parent android:layout_height120dp android:scaleTypecenterCrop android:srcdrawable/product_placeholder/ TextView android:idid/product_name android:layout_widthmatch_parent android:layout_heightwrap_content android:layout_marginStart12dp android:layout_marginTop8dp android:layout_marginEnd12dp android:text商品名称 android:textColorandroid:color/black android:textSize14sp/ TextView android:idid/product_price android:layout_widthmatch_parent android:layout_heightwrap_content android:layout_marginStart12dp android:layout_marginTop4dp android:text¥99.00 android:textColorcolor/price_red android:textSize16sp android:textStylebold/ ImageButton android:idid/favorite_button android:layout_width24dp android:layout_height24dp android:layout_marginStart12dp android:layout_marginTop8dp android:layout_marginBottom8dp android:background?attr/selectableItemBackgroundBorderless android:srcdrawable/ic_favorite_border/ /LinearLayout /com.google.android.material.card.MaterialCardView关键属性说明属性作用推荐值cardCornerRadius设置卡片圆角半径8-12dpcardElevation控制阴影深度2-6dpstrokeColor边框颜色浅灰色rippleColor点击水波纹颜色半透明色2.2 动态效果增强要让卡片更具交互感我们可以添加点击状态变化// 在Activity或Fragment中 val cardView findViewByIdMaterialCardView(R.id.product_card) cardView.setOnClickListener { // 模拟收藏操作 cardView.isChecked !cardView.isChecked } // 通过setChecked改变卡片状态 cardView.addOnCheckedChangeListener { card, isChecked - card.strokeColor ContextCompat.getColorStateList( this, if (isChecked) R.color.card_checked_stroke else R.color.card_stroke ) }3. 高级定制技巧3.1 形状自定义MaterialCardView支持通过ShapeAppearanceModel进行更复杂的外观定制val shapeAppearanceModel ShapeAppearanceModel.builder( context, R.style.ShapeAppearance_MaterialComponents_MediumComponent, 0 ).build() materialCardView.shapeAppearanceModel shapeAppearanceModel3.2 动态阴影控制根据交互状态调整阴影深度materialCardView.setOnTouchListener { v, event - when (event.action) { MotionEvent.ACTION_DOWN - { v.translationZ 8f // 按下时提升阴影 true } MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL - { v.translationZ 0f // 恢复原始状态 false } else - false } }3.3 列表性能优化在RecyclerView中使用时建议设置固定大小提升性能com.google.android.material.card.MaterialCardView android:layout_width160dp android:layout_height240dp android:layout_margin4dp app:cardPreventCornerOverlaptrue4. 完整商品卡片实现结合以上技术点我们实现一个功能完善的商品卡片组件class ProductCardView JvmOverloads constructor( context: Context, attrs: AttributeSet? null, defStyleAttr: Int 0 ) : MaterialCardView(context, attrs, defStyleAttr) { private val binding ProductCardBinding.inflate( LayoutInflater.from(context), this, true ) init { // 初始化点击效果 isClickable true isFocusable true rippleColor ColorStateList.valueOf( ContextCompat.getColor(context, R.color.ripple_light) ) // 设置形状外观 shapeAppearanceModel ShapeAppearanceModel.builder( context, R.style.ShapeAppearance_MaterialComponents_MediumComponent, 0 ).build() } fun setProduct(item: Product) { binding.productName.text item.name binding.productPrice.text ¥${item.price} Glide.with(context) .load(item.imageUrl) .into(binding.productImage) } }配套的XML布局(product_card.xml):layout xmlns:androidhttp://schemas.android.com/apk/res/android xmlns:apphttp://schemas.android.com/apk/res-auto data variable nameproduct typecom.example.model.Product / /data com.google.android.material.card.MaterialCardView android:layout_width160dp android:layout_height240dp app:cardCornerRadius12dp app:cardElevation4dp app:strokeColorcolor/card_stroke app:strokeWidth1dp !-- 内容布局同上 -- /com.google.android.material.card.MaterialCardView /layout5. 实际应用建议阴影优化在浅色背景上使用4-6dp的阴影深色背景建议2-4dp性能平衡避免在单个屏幕使用过多不同圆角半径的卡片状态保存通过setChecked和isChecked管理卡片选中状态主题适配为深色模式提供不同的边框和阴影颜色配置// 深色模式适配示例 val nightModeFlags resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK when (nightModeFlags) { Configuration.UI_MODE_NIGHT_YES - { card.setCardBackgroundColor(Color.DKGRAY) card.strokeColor ColorStateList.valueOf(Color.LTGRAY) } else - { card.setCardBackgroundColor(Color.WHITE) card.strokeColor ColorStateList.valueOf(Color.DKGRAY) } }通过MaterialCardView构建的商品卡片不仅视觉效果专业还能自动适配不同Android版本和设备特性。相比自定义View方案它大幅减少了代码量且维护成本更低。

相关文章:

Android MaterialCardView实战:5分钟搞定商品卡片UI(附完整代码)

Android MaterialCardView实战:5分钟搞定商品卡片UI(附完整代码) 在电商应用开发中,商品卡片的视觉效果直接影响用户点击率和转化率。MaterialCardView作为Android Material Components库中的明星控件,凭借其内置的阴影…...

Vivado IP核生态全解析:从免费到收费,如何选择与授权实战

1. Vivado IP核生态全景图 第一次打开Vivado的IP Catalog时,我完全被琳琅满目的IP核搞晕了——就像走进了一家电子产品超市,货架上摆满了各种功能的"黑盒子"。经过多年项目实战,我才真正理解这些IP核背后的生态逻辑。简单来说&…...

[实战解析] 基于KMeans的豆瓣图书评论主题挖掘与聚类分析

1. 文本聚类与KMeans算法基础 当你打开豆瓣读书页面,海量的图书评论是否让你眼花缭乱?这些评论蕴含着读者对书籍的真实感受,但要从中提炼出有价值的信息却非易事。这就是文本聚类的用武之地——它能自动将相似的评论归为一类,帮我…...

BAAI/bge-m3效果实测:看看它如何精准判断两段话是否相关

BAAI/bge-m3效果实测:看看它如何精准判断两段话是否相关 1. 引言:语义相似度分析的实用价值 在日常工作和生活中,我们经常需要判断两段文字是否相关。比如客服系统要自动匹配用户问题与知识库答案,搜索引擎要理解查询与网页内容…...

从零部署YOLOv8:Atlas200上CANN环境配置、模型转换与推理全链路实践

1. 环境准备:从零搭建Atlas200开发环境 第一次拿到Atlas200开发板时,我对着这个巴掌大的设备有点发懵——这么小的盒子真能跑YOLOv8?后来实测发现,只要环境配置得当,它处理640x640分辨率的图像能达到每秒30帧以上。先说…...

春联生成模型-中文-base入门实战:快速生成多副春联,挑选最满意作品

春联生成模型-中文-base入门实战:快速生成多副春联,挑选最满意作品 春节将至,家家户户都开始为贴春联做准备。传统的印刷春联虽然方便,但总感觉缺少个性;自己创作又担心文采不足。现在,借助"春联生成…...

一键部署清音刻墨Qwen3,体验毫秒级精准字幕对齐技术

一键部署清音刻墨Qwen3,体验毫秒级精准字幕对齐技术 1. 为什么需要精准字幕对齐技术 在视频制作和内容创作领域,字幕同步问题一直是个令人头疼的挑战。传统字幕制作流程通常需要: 人工反复听写音频内容手动标记每个句子的起止时间不断调整…...

5步诊断与修复:ComfyUI视频合成节点缺失问题解决方案

5步诊断与修复:ComfyUI视频合成节点缺失问题解决方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在ComfyUI视频工作流中,VHS_VideoCom…...

3步解锁Mac音频自由:Soundflower虚拟音频驱动全方位应用指南

3步解锁Mac音频自由:Soundflower虚拟音频驱动全方位应用指南 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 在数字化时代…...

解锁你的音乐宝库:ncmdump如何破解网易云音乐NCM格式限制

解锁你的音乐宝库:ncmdump如何破解网易云音乐NCM格式限制 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 你是否曾为网易云音乐下载的NCM格式文件无法在其他设备播放而烦恼?ncmd…...

DELL服务器iDRAC远程安装CentOS 7避坑指南:从ISO映射到系统配置全流程

DELL服务器iDRAC远程安装CentOS 7全流程实战指南 对于运维工程师而言,远程安装服务器操作系统是一项必备技能。DELL服务器的iDRAC(Integrated Dell Remote Access Controller)功能为这一需求提供了完美的解决方案。本文将详细介绍如何通过iD…...

地址匹配神器MGeo部署教程:中文相似度计算一键搞定

地址匹配神器MGeo部署教程:中文相似度计算一键搞定 1. 为什么选择MGeo进行中文地址匹配 在日常业务中,地址匹配是一个常见但棘手的问题。想象一下这些场景: 用户填写的"北京朝阳区建国路8号"与系统中存储的"北京市朝阳区建…...

Vivado FFT IP核实战:从配置到验证的全流程解析

1. Vivado FFT IP核基础与工程背景 第一次接触Vivado的FFT IP核时,我被它复杂的参数配置界面弄得一头雾水。经过几个实际项目的打磨,我发现只要掌握几个关键点,这个强大的信号处理工具就能成为你的得力助手。FFT(快速傅里叶变换&a…...

Z-Image-Turbo-辉夜巫女实操手册:Xinference模型服务日志分级(INFO/WARN/ERROR)解读

Z-Image-Turbo-辉夜巫女实操手册:Xinference模型服务日志分级(INFO/WARN/ERROR)解读 1. 模型服务概述 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo的LoRA版本开发的文生图模型,专门用于生成辉夜巫女风格的图片。该模型通过Xinfe…...

FlowState Lab企业级集成:与SpringCloud微服务治理框架对接

FlowState Lab企业级集成:与SpringCloud微服务治理框架对接 1. 引言:AI微服务的企业级挑战 在数字化转型浪潮中,越来越多的企业开始将AI能力作为核心业务组件。但当我们把FlowState Lab这样的AI服务引入企业环境时,会遇到一些特…...

yz-bijini-cosplay一键部署教程:基于Python爬虫的动漫素材自动采集系统

yz-bijini-cosplay一键部署教程:基于Python爬虫的动漫素材自动采集系统 你是不是也遇到过这样的烦恼?想找一些高质量的动漫角色素材,特别是特定风格的Cosplay或泳装图片,用来做设计参考、灵感收集,或者训练自己的AI模…...

手把手教你部署Ostrakon-VL-8B:上传店铺图片,AI自动盘点库存与检查价格

手把手教你部署Ostrakon-VL-8B:上传店铺图片,AI自动盘点库存与检查价格 1. 为什么零售行业需要专业的多模态AI? 在零售行业工作的人都知道,每天面对的商品管理任务既繁琐又容易出错。传统的人工盘点方式存在几个痛点&#xff1a…...

Lychee Rerank MM从零开始:模型服务健康检查、自动重启与错误降级机制

Lychee Rerank MM从零开始:模型服务健康检查、自动重启与错误降级机制 1. 项目概述与核心价值 Lychee Rerank MM 是一个基于 Qwen2.5-VL 构建的高性能多模态重排序系统,由哈工大(深圳)自然语言处理团队开发。这个系统专门解决多…...

Unity中队列(Queue)的高效应用与实战技巧

1. 为什么Unity开发者需要掌握队列(Queue) 在游戏开发中,我们经常需要处理大量按顺序发生的事件或任务。比如角色释放技能时的伤害计算、NPC对话的逐句显示、关卡中敌人的波次生成等等。这时候如果直接用List或数组来管理,往往会遇到性能瓶颈和逻辑混乱的…...

PowerPaint-V1小白教程:用画笔涂抹就能修图的AI神器

PowerPaint-V1小白教程:用画笔涂抹就能修图的AI神器 1. 为什么PowerPaint-V1值得你尝试 想象一下这样的场景:你拍了一张完美的风景照,但画面角落有个碍眼的垃圾桶;或者你找到一张老照片,可惜中间有破损;又…...

Mac(六)彻底清理卸载应用后的「打开方式」残留项

1. 为什么卸载应用后「打开方式」菜单还有残留? 每次在Mac上卸载完应用,本以为可以彻底告别它,结果右键点击文件时,那个阴魂不散的「打开方式」选项还在列表里晃悠。这种情况我遇到过太多次了,特别是像Photoshop、GIMP…...

构建智能问答系统:NLP-StructBERT与MySQL数据库的协同应用

构建智能问答系统:NLP-StructBERT与MySQL数据库的协同应用 你有没有遇到过这种情况?公司内部的知识库文档堆积如山,新员工问个问题,老员工得翻半天才能找到答案;或者你的产品客服每天要重复回答几百遍相同的问题&…...

Stable Diffusion v1.5 实战体验:轻量部署,4GB显存就能玩的AI绘画神器

Stable Diffusion v1.5 实战体验:轻量部署,4GB显存就能玩的AI绘画神器 在AI绘画的世界里,新模型、新技术层出不穷,动辄要求十几GB显存,让很多普通玩家望而却步。但今天,我想带你重新认识一位“老朋友”——…...

RVC模型开源社区贡献指南:GitHub Pull Request全流程解析

RVC模型开源社区贡献指南:GitHub Pull Request全流程解析 你是不是也用过RVC模型,觉得它很酷,甚至想过“要是能自己改点代码,让它更好用就好了”?或者,你发现了一个小bug,或者有个很棒的新功能…...

寻音捉影·侠客行部署案例:某AI Lab将其作为语音数据清洗前置模块

寻音捉影侠客行部署案例:某AI Lab将其作为语音数据清洗前置模块 1. 引言:当AI Lab遇上音频数据清洗的“江湖侠客” 想象一下,你是一个AI实验室的研究员,手头有堆积如山的语音数据——可能是数千小时的会议录音、用户访谈&#x…...

Z-Image-Turbo快速入门:3步启动WebUI,零基础玩转AI绘画

Z-Image-Turbo快速入门:3步启动WebUI,零基础玩转AI绘画 1. 为什么选择Z-Image-Turbo 如果你正在寻找一个既强大又容易上手的AI绘画工具,Z-Image-Turbo绝对值得一试。这个由阿里巴巴通义实验室开源的高效文生图模型,在速度和画质…...

FireRedASR Pro性能调优指南:GPU显存优化与推理加速技巧

FireRedASR Pro性能调优指南:GPU显存优化与推理加速技巧 如果你已经成功部署了FireRedASR Pro,并且开始处理一些实际的语音识别任务,可能会发现一些问题:处理速度不够快,或者同时处理多个文件时显存很快就满了。这很正…...

Ostrakon-VL-8B微信小程序集成指南:打造拍照识物智能应用

Ostrakon-VL-8B微信小程序集成指南:打造拍照识物智能应用 最近在折腾一个挺有意思的项目,想把一个能看懂图片的AI模型塞进微信小程序里,做个“拍照识物”的小工具。想象一下,你走在路上看到不认识的花草,或者翻出个老…...

4.3 响应式不是适配一下就行:跨设备体验设计清单

第4章 第3节:响应式不是适配一下就行:跨设备体验设计清单 章节主题:前端体验与交互 关键词:AI协作、产品交付、工程化、可持续迭代 一、开场:为什么这件事值得你现在就做 很多读者问过同一个问题:响应式不是适配一下就行:跨设备体验设计清单。 在大量项目复盘中可以看…...

别再只调包了!深入Halcon底层,用矩阵运算亲手实现点云平面拟合

从矩阵运算到工业实践:Halcon点云平面拟合的数学本质与自主实现 在工业视觉检测领域,点云平面拟合是一个看似基础却暗藏玄机的关键技术。当我们面对产线上复杂的三维点云数据时,直接调用Halcon的fit_primitives_object_model_3d算子虽然便捷&…...