Android — 使用recyclerview+FlexboxLayoutManager实现Tag标签

2023-11-05

如图实现下面流式的tag标签。我们用recyclerview+flexboxLayoutManager来实现。

重点:

FlexboxLayoutManager layoutManager =new FlexboxLayoutManager(this);

rv.setLayoutManager(layoutManager);

 1.首先我们引入依赖。在build.gradle文件中。

  implementation 'com.google.android.flexbox:flexbox:3.0.0'

 2.写布局。使用Recyclerview.

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:itemCount="10"
      />

</androidx.constraintlayout.widget.ConstraintLayout>

3.我们写一个简单的adapter,给recyclerview设置adapter. 由于item的布局很简单。里面只有一个textview。这里就省略。。。

public class FlexboxAdapter extends RecyclerView.Adapter<FlexboxAdapter.FlexboxAdapterHolder> {
    Context mContext;
    private List<String> mStringArrayList;
    public FlexboxAdapter(Context context,List<String> list) {
        this.mContext = context;
        this.mStringArrayList= list;
    }
    @Override
    public FlexboxAdapterHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
        return new FlexboxAdapterHolder(view);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @SuppressLint("ResourceAsColor")
    @Override
    public void onBindViewHolder(@NonNull FlexboxAdapterHolder holder, final int position) {
        holder.tvTitle.setText(mStringArrayList.get(position));

    }

    @Override
    public int getItemCount() {
        return mStringArrayList.size();
    }

    public class FlexboxAdapterHolder extends RecyclerView.ViewHolder {
        private final TextView tvTitle;

        public FlexboxAdapterHolder(View itemView) {
            super(itemView);
            tvTitle = itemView.findViewById(R.id.tvTitle);
        }
    }
}

4.在我们的MainActivity中,找到recyclerview。然后给recyclerview设置LayoutManager是FlexboxLayoutManager(重点),然后设置相应的adapter. 代码如下。

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> dataList =new ArrayList();
    private ArrayList<Integer> colorList = new ArrayList();
    private RecyclerView rv;
    private String[] arr= {"aaaaaaaa.jpg","巴拉巴.jpg","我的下朋友企业.jpg","新中.jpg","我的好朋友是不同的风格类型哦哦哦哦哦","开心","测试tag标签"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv = findViewById(R.id.rv);
        //将正常的manager替换为FlexboxLayoutManager
        FlexboxLayoutManager layoutManager =new FlexboxLayoutManager(this);
        layoutManager.setFlexDirection(FlexDirection.ROW);//设置水平方向。也可以设置垂直方向
        // layoutManager.setJustifyContent(JustifyContent.FLEX_END);
        // layoutManager.setAlignItems(AlignItems.CENTER);
        rv.setLayoutManager(layoutManager);

        ArrayList<String> list = new ArrayList<>();
        for(int i=0;i<arr.length;i++){
            list.add(arr[i]);
        }
        FlexboxAdapter adapter =new FlexboxAdapter(this,list);
        rv.setAdapter(adapter);

    }
}

补充:layoutManager.setFlexDirection(FlexDirection.ROW) ;//设置水平方向。从左到右
FlexDirection.COLUMN //垂直方向,从上到下
FlexDirection.ROW_REVERSE //水平方向,从右到左
FlexDirection.COLUMN_REVERSE //垂直方向,从下到上

layoutManager.setFlexWrap(FlexWrap.WRAP); //是否换行FlexWrap.NOWRAP不换行 FlexWrap.WRAP换行
layoutManager.setJustifyContent(JustifyContent.FLEX_END); //项目在主轴上对齐方式,例如上面定义水平方向,就是水平方向对齐方式
layoutManager.setAlignItems(AlignItems.CENTER);//项目在交叉口对齐方式,因为上面定义水平方向,则为在垂直方向对齐方式
想了解更多属性含义可以参考以下文章

flex布局总结_棒怡情的专栏-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android — 使用recyclerview+FlexboxLayoutManager实现Tag标签 的相关文章

  • 更改首选项的背景颜色

    我有一个PreferenceCategory xml 文件 我已经在其中定义了所有首选项 我从扩展的类中调用它PreferenceActivity 我无法设置设置屏幕的背景 该屏幕是在如下所示的 xml 文件的帮助下显示的 请看我已经定义了
  • Whatsapp 在 Android 中共享音频文件时正在剪切音频文件

    我在共享格式不是 mp3 的音频文件时遇到问题 文件被共享 但长度较短 例如 如果文件有 10 秒 则仅共享 5 秒 如果我使用 mp3 格式 它会完全共享 但其他格式会出现问题 注意 该文件在其他应用程序 如Messenger 中共享没有
  • 更改操作栏标题文本颜色

    我正在尝试更改 ActionBar 中标题文本的颜色 但我似乎无法让它工作 这是我尝试使用的风格 在我的应用程序主题中我使用titleTextStyle
  • Android Studio磁盘空间不足如何解决?

    我随机收到此错误 并且不确定为什么 Android Studio 的磁盘空间变低 Android Studio 系统目录分区磁盘空间不足 Update 此应用程序安装在运行 10 10 1 的 Mac 上 具有 251GB 内部存储和占用
  • Android 上通过 JSCH 的基本 SSH 连接

    作为来自此的用户question https stackoverflow com questions 14323661 simple ssh connect with jsch和这个tutorial http eridem net andr
  • 从Asynctask返回结果

    如果我的 Android 应用程序中有这个后台工作文件 并且它从我的数据库获取数据 我如何将字符串 结果 传递给另一个类 后台工作人员连接到我的服务器 然后使用 php 连接到数据库 public class BackgroundWorke
  • 将 ArrayList 保存在捆绑包 savingInstanceState 中

    ArrayList 是在类级别定义的 这些是我保存的实例方法 Override protected void onSaveInstanceState Bundle outState super onSaveInstanceState out
  • 我可以使用“导入 com.facebook.FacebookSdk;”使用 Facebook SDK 3.23.1?

    在我的 app build gradle 文件中 我有compile com facebook android facebook android sdk 3 23 1 在我的 BaseActivity java 文件 其中有 public
  • 对基本适配器类及其功能的疑问

    我正在尝试自定义列表视图 我使用数组列表添加对象列表 并将其发送到扩展基本适配器的类 当我扩展基本适配器类时 它实现了一些方法 例如 getView 等 在 getView 中 我将其发送到将名称 数据 分配给 XML 格式的自定义菜单的类
  • NoClassDefFoundError:com.google.firebase.FirebaseOptions

    我继续得到NoClassDefFoundError在我正在使用的其他测试设备 4 4 2 上 但在我的测试设备 Android 5 1 上运行良好 我尝试了用谷歌搜索的解决方案 但似乎没有任何效果 我正在使用 Firebase 实时数据库
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • EditText 的高度不会扩展到其父级的高度

    我在滚动视图中放置了编辑文本 高度 match parent并期望它的高度等于滚动视图 但事实并非如此 它的高度就像wrap content这意味着如果 EditText 中没有文本 我必须将光标指向要弹出的软键盘的第一 行 我想要的是我可
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • Android 视图和视图组

    在安卓中ViewGroup继承自View A ViewGroup是一个容器 里面装有Views ViewGroup LinearLayout View TextView 为什么 Android 的人们将这种关系定义为Inheritance而
  • Exif 方向标签返回 0

    我正在开发一个自定义相机应用程序 我面临以下问题 当我尝试使用检索方向时ExifInterface 它总是返回 0 ORIENTATION UNDEFINED 这使我无法将图像旋转到正确的状态 从而无法正确显示 我使用示例代码来设置相机旋转
  • Admob - 没有广告可显示

    你好 我尝试制作一些在 Android 手机上显示广告的示例程序 并尝试在 v2 2 的模拟器上测试它 代码中的一切似乎都很好 但调试器中的 AdListener 表示 响应消息为零或空 onFailedToReceiveAd 没有广告可显
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca

随机推荐

  • Flask简单调用Redis、MySQL和生成token及token验证

    项目地址 https github com MasonYyp myflask 1 安装python基础环境 安装flask pip install flask 安装redis pip install redis 安装操作MySQL的包 pi
  • 如家酒店房价爬虫

    爬取地址 http m homeinns com hotels J10013 如家精选 北京中关村东路店 首先 从chrome浏览器打开F12审查元素 价格是用背景图片形式展现的 我们先获取背景图片 图片url 图片地址为 http m h
  • Java 基础入门篇(五):面向对象编程

    文章目录 一 面向对象的思想 二 类的定义与对象的创建 三 对象内存分配情况 3 1 两个对象的内存图 3 2 两个变量指向同一个对象内存图 四 构造器 4 1 构造器的格式与分类 4 2 构造器的调用 五 this 关键字 六 封装 七
  • springboot整合shiro(新手教程)

    咱们也就不多哔哔 直接开始 我先放我自己写的项目结构 第一步 想啥了 肯定是先创建一个springboot的项目 第二步 配置pom文件
  • vue3.0新增和删除的内容

    新增组件
  • 关于解决构建maven项目中报错:Failed to execute goal org.apache.maven.pluginsmaven-archetype-plugin

    1 首先进入仓库下面repositoryorgapachemavenplugins这个目录 2 删除目录下的maven archetype plugin文件夹 3 重新加载
  • Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)

    文章目录 1 前言 2 st line chart 绘制线状图 3 st area chart 绘制面积图 4 st bar chart 绘制柱状图 5 st pyplot 绘制自定义图表 6 结语 1 前言 在数据可视化的世界中 绘制清晰
  • 2022国赛15:Windows——文件共享

    试题内容 四 文件共享 任务描述 为了使局域网中的特定用户 能够访问共享文件夹内的 特定资源 请采用文件共享 实现共享资源的安全访问 1 在 windows1 创建用户主目录共享文件夹 本地目录为 D share home 共享名为 hom
  • React请求数据渲染页面

    1 使用react fetch数据发送请求 1 get方法 componentDidMount fetch url then res gt res json then json gt this setState list json 2 po
  • npm、pnpm、yarn的常用命令

    npm pnpm yarn的常用命令 文章目录 npm pnpm yarn的常用命令 一 常用命令 1 npm命令 2 pnpm命令 3 yarn命令 二 对比 一 常用命令 1 npm命令 npm init 初始化一个新的npm包 npm
  • 第12章 图形用户界面基础

    1 Swing和AWT的不同 AWT适合开发简单的图形用户界面 但不适合开发复杂的GUI项目 也容易发生于特定平台相关的故障 重量级组件 SWing更稳定 更通用 更灵活 不依赖于自己GUI 轻量级组件 SWing GUI组件类都以字母J为
  • EasyCHM编译的文件在点击节点时出现错误:确保Web地址//ieframe.dll/dnserrordiagoff.htm#正确

    EasyCHM编译后的文件打开时出现错误提示 解决方案 一 mht文件的文件名及路径中不能包含中文 二 修改节点的属性 检查路径是否正确
  • zookeeper

    1 zookeeper是什么 参考文献 Zookeeper可以干什么 zookeeper为分布式应用程序提供一致性协调服务 包括配置维护 域名服务 分布式锁 集群管理等 配置维护 同一个应用程序在不同服务器上的配置信息相同 将应用程序的配置
  • Android集成bilibili播放器以及弹幕

    考虑到开发直播和视频播放的必要性 网上了解到b站开源播放器 https github com bilibili ijkplayer 好用 集成下试试 运行后发现b站原生的只能播放没有其他选项 考虑到方便性 采用这个方案 https gith
  • Qt modbus使用详解

    不讲理论 只讲应用 看完这篇就能用起来 爽不爽 具体内容目录如下 如需请订阅专栏后观看 目录 一 Modbus协议通信过程 1 1 主机对从机写数据操作 0x06 1 2 主机对从机读数据操作 0x03 1 3 Modbus的CRC校验 二
  • 图的遍历(c语言)

    文章目录 图的遍历 种类 深度优先遍历 算法实现 广度优先遍历 算法实现 图的遍历 概念 图遍历是一种用于在图中搜索顶点的技术 图的遍历也用来决定在搜索过程中访问顶点的顺序 图的遍历可以在不创建循环的情况下找到要在搜索过程中使用的边 这意味
  • HJ92 在字符串中找出连续最长的数字串

    Powered by NEFU AB IN Link 文章目录 HJ92 在字符串中找出连续最长的数字串 题意 思路 代码 HJ92 在字符串中找出连续最长的数字串 题意 输入一个字符串 返回其最长的数字子串 以及其长度 若有多个最长的数字
  • java设计模式-单例模式

    package com hcmony singleton h3 单例模式 这种有并发问题 还有很多没有写 h3 p 单例模式 Singleton Pattern 是 Java 中最简单的设计模式之一 这种类型的设计模式属于创建型模式 它提供
  • fastapi与django异步的并发对比

    概述 据说fastapi是目前最快的异步框架 遂决定将其和django异步进行并发比较 先说结果 fastapi的异步可以使整体运行速度非常均衡 不会出现较大波动 但是django会出现大量的波动问题 部分访问速度很快 但是部分访问速度很慢
  • Android — 使用recyclerview+FlexboxLayoutManager实现Tag标签

    如图实现下面流式的tag标签 我们用recyclerview flexboxLayoutManager来实现 重点 FlexboxLayoutManager layoutManager new FlexboxLayoutManager th