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

【Android】四种不同类型的ViewHolder的xml布局

在这里插入图片描述

三三要成为安卓糕手
书接上文

一:四种不同类型的ViewHolder的xml布局

广告样式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/white"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:src="@drawable/bg_ad1"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_close"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="2"android:text="点击关闭广告"android:textColor="@color/white"android:textSize="18sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="@id/iv_picture" /></androidx.constraintlayout.widget.ConstraintLayout>

单张图片的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="100dp"android:layout_height="70dp"android:scaleType="centerCrop"android:src="@drawable/icon_logo"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="2"android:text="落魄谷中寒风吹,春秋蝉鸣少年归,荡魂山处石人泪,定仙游走魔向北,逆流河上万仙退,爱情不敌坚持泪,宿命天成命中败,仙尊悔而我不悔"android:textSize="18sp"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toTopOf="@id/iv_picture" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="1"android:text="作者:大爱仙尊"android:textSize="16sp"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toBottomOf="@+id/tv_title" /></androidx.constraintlayout.widget.ConstraintLayout>

两张图片的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/white"android:padding="12dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:ellipsize="end"android:maxLines="2"android:text="我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题"android:textColor="@color/black"android:textSize="18sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:ellipsize="end"android:maxLines="1"android:text="我是作者我是作者我是作者"android:textSize="16sp"app:layout_constraintEnd_toEndOf="@id/iv_picture2"app:layout_constraintTop_toBottomOf="@id/iv_picture2" /><ImageViewandroid:id="@+id/iv_picture1"android:layout_width="0dp"android:layout_height="100dp"android:scaleType="centerCrop"android:layout_marginTop="8dp"android:src="@drawable/ic_article_1"app:layout_constraintEnd_toStartOf="@id/iv_picture2"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_title" /><ImageViewandroid:id="@+id/iv_picture2"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginLeft="20dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture1"app:layout_constraintTop_toTopOf="@id/iv_picture1" /></androidx.constraintlayout.widget.ConstraintLayout>

三张图片的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/white"android:padding="12dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:ellipsize="end"android:maxLines="2"android:text="我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题"android:textColor="@color/black"android:textSize="18sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:ellipsize="end"android:maxLines="1"android:text="我是作者我是作者我是作者"android:textSize="16sp"app:layout_constraintEnd_toEndOf="@id/iv_picture3"app:layout_constraintTop_toBottomOf="@id/iv_picture3" /><ImageViewandroid:id="@+id/iv_picture1"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginTop="8dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_1"app:layout_constraintEnd_toStartOf="@id/iv_picture2"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_title" /><ImageViewandroid:id="@+id/iv_picture2"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginLeft="6dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_2"app:layout_constraintEnd_toStartOf="@id/iv_picture3"app:layout_constraintStart_toEndOf="@id/iv_picture1"app:layout_constraintTop_toTopOf="@id/iv_picture1" /><ImageViewandroid:id="@+id/iv_picture3"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginLeft="6dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture2"app:layout_constraintTop_toTopOf="@id/iv_picture1" /></androidx.constraintlayout.widget.ConstraintLayout>

二:getItemViewType

新的知识点,用来判断布局类型,提前设计好int类成员变量用于返回值;在创建Holder(杯子)时,返回值直接作为参数传递给onCreateViewHolder方法中的形参viewtype了,具体内部源代码是怎么实现的不深究

三:Article类的设计

package com.xlong.myapplication.recyclerview;public class Article {private String title;//标题private String desc;//描述private String author;//作者private long publish;//发布时间private int picture;//图片资源private int picture2;//图片资源2private int picture3;//图片资源3private boolean idAd;//当前的咨询是不是广告private int adPicture;//广告对应的图片资源public int getPicture2() {return picture2;}public void setPicture2(int picture2) {this.picture2 = picture2;}public int getPicture3() {return picture3;}public void setPicture3(int picture3) {this.picture3 = picture3;}public boolean isIdAd() {return idAd;}public void setIdAd(boolean idAd) {this.idAd = idAd;}public int getAdPicture() {return adPicture;}public void setAdPicture(int adPicture) {this.adPicture = adPicture;}public Article(boolean idAd, int adPicture) {this.idAd = idAd;this.adPicture = adPicture;}public Article(String title, String author, int picture) {this.title = title;this.author = author;this.picture = picture;}public int getPicture() {return picture;}public void setPicture(int picture) {this.picture = picture;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public long getPublish() {return publish;}public void setPublish(long publish) {this.publish = publish;}
}

四:一些细节

1:设计

图片成员变量怎么设计

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建数据中不同的Article类型(两、三张图片,广告),使用不同的构造方法,或者get和set方法。这些都是基本功要掌握扎实

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:数据源的创建细节

在设置循环视图中,数据在适配器的添加之前,或者之后问题都不大

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为setArticles中notifyDataSetChanged();的调用会告诉RecycleView刷新数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3:多布局的设计,不要用泛型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4:case + default 允许共存

在写创建Holder,内部代码逻辑的时候不要返回一个null,无论如何都需要给onCreateViewHolder返回一个viewHolder

switch 结构里:

  • case 用于匹配具体的条件分支,处理特定的情况(比如 case ITEM_TYPE_ARTICLE_1 想处理类型为 ITEM_TYPE_ARTICLE_1 的情况 )。
  • default 是 “兜底” 分支,当所有 case 都没匹配上时,才会走 default 里的逻辑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5:对比一下

对比一下就明白了,左图是一种视图类型所以只用一个MyVIewHolder(用的是泛型)即可;我们增加到了4种MyviewHolder如右图代码处理逻辑

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6:效果图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五:为RecyclerView添加分割线

需求:为每一个item做一个分割线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

思路在每一个四种xml布局中单独,设置一个view分割线,

    <Viewandroid:layout_width="match_parent"android:layout_height="1px"android:background="@color/my_blue"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent" />

但是会比较麻烦一点:单独做一个分割线,要加内边距,嵌套什么的,得不偿失,只作为备选方案,就比如以下的代码

    <androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="12dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="100dp"android:layout_height="70dp"android:scaleType="centerCrop"android:src="@drawable/icon_logo"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="2"android:text="落魄谷中寒风吹,春秋蝉鸣少年归,荡魂山处石人泪,定仙游走魔向北,逆流河上万仙退,爱情不敌坚持泪,宿命天成命中败,仙尊悔而我不悔"android:textSize="18sp"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toTopOf="@id/iv_picture" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="1"android:text="作者:大爱仙尊"android:textSize="16sp"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toBottomOf="@+id/tv_title" /></androidx.constraintlayout.widget.ConstraintLayout>

效果如下,一般般吧

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1:安卓默认自带分割线

Recycle中提供了直接添加分割线的方法

//4.1系统自带分割线recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

(1)addItemDecoration()

添加item装饰;参数是 ItemDecoration 的子类实例

(2)new DividerItemDecoration()

这是 Android 系统提供的一个ItemDecoration子类

创建item装饰分割器,

  • 第一个参数 context:上下文对象,通常是当前 Activity

  • 第二个参数 orientation:分割线方向

    • DividerItemDecoration.VERTICAL:垂直方向的分割线(用于垂直滚动的列表)
    • DividerItemDecoration.HORIZONTAL:水平方向的分割线(用于水平滚动的列表)

2:用图片当做分割线

//4.2使用图片素材作为分割线DividerItemDecoration decoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);Drawable drawable = getDrawable(R.drawable.item_div);decoration.setDrawable(drawable);recyclerView.addItemDecoration(decoration);

其实就比上面的代码多了一个setDrawable(),上面代码内部应该有默认设置了一个Drawable

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义图片作为分割线,对照片的要求更高,后面还会学习在安卓studio中,自己去画一些图片,现在就先学这两种方式就OK了

http://www.lryc.cn/news/620044.html

相关文章:

  • transforms的使用 小土堆pytorch记录
  • 专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载
  • MATLAB 绘图速查笔记
  • 如何通过 Actor 网络压缩为概率分布实现
  • 使用 python-pptx 完成 ppt 页面的复制
  • 终端安全检测与防御
  • Open3d:从mesh中采样点云的两个函数
  • round robin轮询仲裁器
  • 2025 开源语音合成模型全景解析:从工业级性能到创新架构的技术图谱
  • hutool 作为http 客户端工具调用的一点点总结
  • 理解RESTful架构:构建优雅高效的Web服务
  • 《Unity Shader入门精要》学习笔记一
  • Dimensional Analysis量纲分析入门
  • 【Excel】被保护的文档如何显示隐藏的行或列
  • MongoDB 入门指南二:索引 —— 让查询速度飞起来
  • 随想记-excel报表美化
  • 选择排序专栏
  • 使用 6 种方法将文件从 Android 无缝传输到iPad
  • C# 反射和特性(获取Type对象)
  • 攒钱学概论:5、创业术
  • window显示驱动开发—DirectX 9 资源创建
  • 《AVL树的原理与C++实现:详解平衡二叉搜索树的高效构建与操作》
  • 【自动化运维神器Ansible】playbook主机清单变量深度解析:主机变量与组变量的实战应用
  • JavaWeb-Servlet基础
  • CodeBuddy在AI开发方面的一些特色
  • 1.Cursor快速入门与配置
  • PyTorch Tensor完全指南:深度学习数据操作的核心艺术
  • Matlab(4)
  • C++ stack and queue
  • 【OSPP 开源之夏】Good First issue 第一步—— openEuler Embedded 计划