Android 开发:交错网格、卡片视图与 RecyclerView 实战

哈喽~ 今天整理了 Android 开发的核心知识点!主要围绕瀑布流布局、卡片视图、滑动容器对比RecyclerView 点击事件展开,都是实际开发中高频用到的技能,赶紧码住呀✨

一、🌟 StaggeredGridLayoutManager:瀑布流布局神器

StaggeredGridLayoutManager 是 RecyclerView 的特殊布局管理器,继承自 LinearLayoutManager,和传统 GridLayoutManager 最大的区别是 ------支持 Item 高度 / 宽度不一致,轻松实现瀑布流效果!📊

适用场景

图片展示、新闻摘要、商品列表

核心用法

1、构造函数:创建实例时指定列数(垂直布局)/ 行数(水平布局)+ 方向

java 复制代码
// 垂直布局,3列
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, RecyclerView.VERTICAL);

动态调整列数 / 行数setSpanCount(int spanCount),调用后 RecyclerView 会重新布局

切换布局方向setOrientation(int orientation),支持垂直 / 水平切换

反向布局setReverseLayout(boolean reverseLayout),true 时垂直从下往上、水平从右往左排列(默认 false)

布局参数小技巧

StaggeredGridLayoutManager.LayoutParams 支持特殊需求:

  • 跨列 / 跨行显示 :设置isFullspan=true,Item 会占据整行 / 整列,超适合做头部布局(Header)📌
  • 自定义参数 :通过setLayoutParams设置 Item 宽高、跨列属性等

二、🃏 CardView:Material Design 风格卡片组件

CardView 是 Material Design 的核心组件,AndroidX 库提供支持,兼容旧版本,用来做卡片式展示超美观!

核心特点

  • 圆角:可设置圆角半径,边缘更柔和
  • 阴影:通过cardElevation属性添加阴影,增强立体感
  • 背景色:cardBackgroundColor自定义,适配应用主题
  • 内边距:cardContentPadding控制内容与卡片边缘间距
  • 可点击:继承自 FrameLayout,支持点击 / 聚焦事件,还能嵌套任意视图
  • 兼容性好:依托 AndroidX,老版本系统也能正常使用

三、📜 ViewPager2 vs ViewPager:滑动容器对比

ViewPager2 是 ViewPager 的升级版本,功能更强大,交互更流畅!

特性 ViewPager2 ViewPager
滑动方向 📶 支持垂直 + 水平 📐 仅支持水平
性能 & 动画 🚀 基于 RecyclerView,性能更优 🐢 性能较弱,动画效果有限
适配器 🧩 用 RecyclerView.Adapter,简单易用 🧩 需用 PagerAdapter,相对复杂
动态更新 ✅ 支持动态更新页面内容 ❌ 动态更新受限
Fragment 支持 ✅ 直接支持 Fragment 作为页面 ❌ 需通过专用适配器适配
触摸交互 🖐️ 触摸功能较少 🖐️ 更多手势交互支持

四、🖱️ RecyclerView 点击事件:实现

RecyclerView 专注于数据展示和复用,不直接处理点击事件,需要我们手动实现,步骤超简单!

实现步骤(附代码)

1、定义点击事件接口:在 Adapter 中声明

java 复制代码
public interface OnItemClickListener {
    void onItemClick(View view, int position);
}

2、 持有接口实例:在 Adapter 中定义并提供设置方法

java 复制代码
private OnItemClickListener mListener;

// 设置监听器的方法
public void setOnItemClickListener(OnItemClickListener listener) {
    this.mListener = listener;
}

3、在 ViewHolder 中设置监听 :在onBindViewHolder或 ViewHolder 构造器中

java 复制代码
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    // 绑定数据...
    
    // 给Item根视图设置点击监听
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mListener != null) {
                mListener.onItemClick(holder.itemView, position);
            }
        }
    });
}

4、在 Activity/Fragment 中使用:处理点击逻辑

java 复制代码
adapter.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        // 比如弹出提示
        Toast.makeText(context, "点击了第" + position + "项", Toast.LENGTH_SHORT).show();
    }
});

五、📌 小总结

RecyclerView 点击事件四步走:定义接口→持有实例→设置监听→处理逻辑

相关推荐
千里马学框架13 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台13 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone14 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc14 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo16 小时前
Kotlin 协程中的 Job 结构化并发与取消
android
sun00770016 小时前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼17 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone18 小时前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen18 小时前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone18 小时前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui