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

Android UI: 自定义控件:可换行的布局控件

文章目录

    • 继承ViewGroup
    • 重写onMeasure方法:计算并设置布局控件的高度
    • 重写onLayout方法:计算并设置每个子控件的位置
    • 具体的代码实现
    • 小结

继承ViewGroup

        重写generateLayoutParams,设置子控件的LayoutParams为MarginLayoutParams类型

    @Overridepublic LayoutParams generateLayoutParams(AttributeSet attrs) {return new MarginLayoutParams(getContext(), attrs);}

重写onMeasure方法:计算并设置布局控件的高度

子控件的两种情况

        第一种情况:所有子控件的宽度是一致且固定的,布局控件的宽度是固定,高度不确定

                1.获取子控件的固定的宽高

measureChildWithMargins(childView, widthMeasureSpec, 0, heightMeasureSpec, 0);
int childWidth = child.getMeasuredWidth();
int childHeight = child.getMeasuredWidth();

                注意:使用View.getMeasuredWidth/Height()需要确保使用之前,该View对象已经被measure过

                2.获取布局控件的measured宽度

int width = MeasureSpec.getSize(widthMeasureSpec);

                3.计算一行放置多少个子控件,根据子控件个数和布局控件的measured宽度确定布局控件的高度

setMeasuredDimension(width, height);

        第二种情况:每个子控件的宽度都不固定,布局控件的宽度是固定,高度不确定

                1.获取布局控件的measured宽度

int width = MeasureSpec.getSize(widthMeasureSpec);

                2.遍历布局控件中所有子控件

                        1.获取每个子控件的宽度

measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0);
childWidth = child.getMeasuredWidth();
childHeight  = child.getMeasuredHeight();

                       2.累加子控件的宽度,判断是否当前子控件是否需要换行,需要换行,重新累加子控件的宽度,累加高度

            3.遍历结束,设置布局控件的高度

setMeasuredDimension(width, height);

重写onLayout方法:计算并设置每个子控件的位置

遍历布局控件中所有子控件,计算设置每个子控件的位置childLeft, childTop

child.layout(childLeft , childTop,childLeft+childWidth, childTop+ childHeight);

具体的代码实现

        ​​​​​​​Android UI 代码实现:可换行的布局控件

小结

        

相关文章:

Android UI: 自定义控件:可换行的布局控件

文章目录 继承ViewGroup重写onMeasure方法:计算并设置布局控件的高度重写onLayout方法:计算并设置每个子控件的位置具体的代码实现小结 继承ViewGroup 重写generateLayoutParams,设置子控件的LayoutParams为MarginLayoutParams类型 Overridep…...

Linux(Ubuntu)中安装vscode

①首先去vscode的官网下载.deb文件 网址:https://code.visualstudio.com/docs/?dvlinuxarm64_deb 注:如果linux端无法打开网页下载文件,可以在Windows端下载好用WinSCP传输到Linux。下载前注意下你的系统架构是arm还是amd,系统…...

MQTT Topic通配符

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…...

负载均衡 dubbo

1 自定义负载均衡 dubbo 在 Dubbo 中,用户可以自定义负载均衡策略以满足特定场景的需求。Dubbo 提供了扩展接口 com.alibaba.dubbo.rpc.cluster.LoadBalance 来支持自定义负载均衡算法。 要实现自定义的负载均衡策略,需要完成以下步骤: 创建…...

(含代码)利用NVIDIA Triton加速Stable Diffusion XL推理速度

在 NVIDIA AI 推理平台上使用 Stable Diffusion XL 生成令人惊叹的图像 扩散模型正在改变跨行业的创意工作流程。 这些模型通过去噪扩散技术迭代地将随机噪声塑造成人工智能生成的艺术,从而基于简单的文本或图像输入生成令人惊叹的图像。 这可以应用于许多企业用例&…...

【Spring】学习Spring框架那点小事儿

Spring作者:Rod Johnson Rod Johnson 是一位软件开发人员和作家,他在软件开发领域有着广泛的影响力。他出生于澳大利亚,拥有计算机科学和音乐双学位(能写出有优雅的代码一定有艺术细胞)。 Rod Johnson 在 2002 年出版…...

L2-035 完全二叉树的层序遍历(Python)

L2-035 完全二叉树的层序遍历 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度…...

get命令使用提交代码

当你想要通过Git提交代码时,以下是一个详细的案例,包括从创建更改到推送到远程仓库的整个过程: 首先,确保你已经在本地仓库目录中进行了需要的更改。 添加更改到暂存区: git add . 这会将所有更改添加到Git的暂存区&…...

矩阵乘积知识

参考:矩阵点乘【矩阵点乘计算公式】_万动力 矩阵乘 矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。 哈达码积 别名:矩阵点乘&…...

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的,外观模式(门面模式)是一种结构型设计模式。它提供一个统一的接口,用于访问子系统中的一组接口,隐藏了系统的复杂性。最简单的应用就是,当controller层的逻辑处…...

小程序APP为什么要选择游戏盾SDK防护DDOS

小程序APP为什么要选择游戏盾SDK防护DDOS?在移动互联网高速发展的今天,小程序APP已经成为了人们日常生活中不可或缺的一部分。无论是购物、娱乐还是社交,小程序APP都为我们提供了极大的便利。然而,随着小程序APP的普及&#xff0c…...

STL之deque容器代码详解

1 基础概念 功能: 双端数组,可以对头端进行插入删除操作。 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低。 deque相对而言,对头部的插入删除速度回比vector快。 vector访问…...

Liunx文件系统和基础IO

文件系统和基础IO 基础IOc语言基础IO函数当前路径和标准流系统IO系统调用函数重定向FILE文件结构体 在谈缓存区问题理解文件系统初识inode 基础IO c语言基础IO函数 打开与关闭 FILE *fopen(char *filename, const char *mode);选项还可以是 r/w/a 意味着为可读可写打开。 2…...

【Python+Selenium学习系列5】Selenium特殊元素定位之-鼠标悬停操作

前言 Selenium模拟用户在浏览器中的操作,比如点击按钮。在某些场景下,我们需要模拟鼠标悬停的操作,来触发一些隐藏的元素。本文将介绍Python Selenium实现鼠标悬停操作。 鼠标悬停,即当光标与其名称表示的元素重叠时触发的事件&…...

简介:基于 OpenTiny 组件库的 rendereless 无渲染组件架构

在 HAE 自研阶段,我们实现的数据双向绑定、面向对象的 JS 库、配置式开发的注册表等特性,随着前端技术的高速发展现在已经失去存在的意义,但是在 AUI 阶段探索的新思路新架构,经过大量的业务落地验证,再次推动前端领域…...

tcp 连接数上限突破

连接数上限条件 文件句柄的限制 一个tcp连接就需要占用一个文件描述符,一旦文件描述符用完,新的连接就会返回给我们错误是:Can’topen so many files。linux系统出于安全角度的考虑,在多个维度对于可打开的文件描述符进行了限制…...

解决 mmseg/models/decode_heads/mask2former_head.py 中__init__()关键字参数错误

目录 【1 - 问题描述】 【2 - 报错位置检查】 【3 - 问题解决】 【4 - 解决的过程】 【1 - 问题描述】 在mmsegmentation中运行mask2former模型的分割任务遇到报错缺少关键字的错误: TypeError: class Mask2FormerHead in mmseg/models/decode_heads/mask2form…...

​如何使用 ArcGIS Pro 分析爆炸波及建筑

假设在某栋建筑内发生了爆炸,需要根据爆炸的范围分析出来波及的建筑,对于这一需求,我们可以通过ArcGIS Pro来实现,这里为大家介绍一下分析的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…...

LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。 loadbalancer本地负载均衡,在调用微服务接口时候&a…...

每日一题 第一期 洛谷 铺地毯

[NOIP2011 提高组] 铺地毯 https://www.luogu.com.cn/problem/P1003 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n n n 张地毯,编号从 1 …...

Python实战:如何用多线程加速破解ZIP/RAR密码(附完整代码)

Python多线程密码破解实战:从原理到性能优化 在数据恢复和渗透测试领域,密码保护的压缩文件处理是常见需求。当我们面对遗忘密码的ZIP/RAR文件时,Python提供了高效的解决方案。本文将深入探讨如何利用多线程技术显著提升密码破解效率&#xf…...

Intv_AI_MK11 Java开发环境快速搭建:从JDK安装到模型调用

Intv_AI_MK11 Java开发环境快速搭建:从JDK安装到模型调用 1. 前言:为什么选择Java调用AI模型 Java作为企业级开发的主流语言,在AI应用开发中同样能发挥重要作用。Intv_AI_MK11作为新一代AI模型,提供了完善的Java SDK支持&#x…...

Pixel Language Portal 助力Java面试:高频八股文深度解析与延伸

Pixel Language Portal 助力Java面试:高频八股文深度解析与延伸 1. Java面试准备的痛点与解决方案 对于Java开发者来说,面试准备往往陷入"死记硬背"的困境。传统的八股文学习方式存在三大核心问题:答案过于标准化缺乏深度理解、知…...

如何高效实现图标自动化导入:unplugin-icons与unplugin-vue-components的完美配合指南

如何高效实现图标自动化导入:unplugin-icons与unplugin-vue-components的完美配合指南 【免费下载链接】unplugin-icons 🤹 Access thousands of icons as components on-demand universally. 项目地址: https://gitcode.com/gh_mirrors/un/unplugin-i…...

从插件安装到项目配置:在Cursor里用CMake和.vscode文件夹搞定C++开发环境

从插件安装到项目配置:在Cursor里用CMake和.vscode文件夹搞定C开发环境 如果你已经厌倦了每次新建C项目都要重新配置开发环境的繁琐流程,这篇文章将带你彻底告别这种低效状态。作为一款新兴的智能代码编辑器,Cursor凭借其出色的AI辅助功能和轻…...

OpenClaw安全指南:千问3.5-9B本地化部署权限控制

OpenClaw安全指南:千问3.5-9B本地化部署权限控制 1. 为什么需要关注OpenClaw的安全配置? 去年冬天,我在调试一个自动整理文档的OpenClaw任务时,差点酿成大祸。当时脚本误将整个Downloads文件夹的内容按修改日期排序后&#xff0…...

PyCharm与Anaconda环境管理详解:Phi-3-mini-4k-instruct-gguf解决Python包冲突

PyCharm与Anaconda环境管理详解:Phi-3-mini-4k-instruct-gguf解决Python包冲突 1. 为什么需要环境管理工具 Python开发中最让人头疼的问题之一就是包冲突。你可能遇到过这种情况:昨天还能运行的代码,今天突然报错;或者在一个项目…...

OpenClaw多端同步:千问3.5-9B任务在手机与PC间无缝衔接

OpenClaw多端同步:千问3.5-9B任务在手机与PC间无缝衔接 1. 为什么需要跨设备任务同步? 去年冬天的一个深夜,我正躺在沙发上用手机浏览技术文档,突然想到需要运行一个数据分析脚本。但电脑在书房,实在不想起身。那一刻…...

Tubular部署与配置教程:从源码编译到F-Droid发布的完整流程

Tubular部署与配置教程:从源码编译到F-Droid发布的完整流程 【免费下载链接】Tubular A fork of NewPipe that implements SponsorBlock and ReturnYouTubeDislike. 项目地址: https://gitcode.com/gh_mirrors/tu/Tubular Tubular是一款基于NewPipe开发的增强…...

实战演练:基于快马平台与zeroclaw理念构建高性能个人博客系统

最近在尝试用zeroclaw理念重构个人博客系统,发现这种极简高效的设计思路确实能大幅提升开发效率和运行性能。今天就来分享下基于InsCode(快马)平台实现的完整实战过程。 项目架构设计 zeroclaw的核心是"零冗余",所以在设计阶段就做了严格的功能…...