位置: 编程技术 - 正文

Android自定义之流式布局(android自定义控件入门与实战)

编辑:rootadmin

推荐整理分享Android自定义之流式布局(android自定义控件入门与实战),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android 自定义spinner,安卓自定义app,android 自定义view三个方法,安卓自定义app,android自定义属性详解,android自定义属性详解,android 自定义view三个方法,android自定义属性详解,内容如对您有帮助,希望把文章链接给更多的朋友!

Android自定义之流式布局(android自定义控件入门与实战)

流式布局,好处就是父类布局可以自动的判断子孩子是不是需要换行,什么时候需要换行,可以做到网页版的标签的效果。今天就是简单的做了自定义的流式布局。

具体效果:原理:其实很简单,Measure Layout。只需要这两个步骤就可以搞定了。完全的手动去Measure Layout。我们看一下代码。解释就在代码里面做注释了,因为使用为知笔记写的博客,&#;式不符合代码&#;式。大家可以看具体的源码。最后又源码下载地址。1.Measure 测量 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSize = MeasureSpec.getSize(widthMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int lineHeight = 0 ; int lineWidth = 0 ; int width = 0 ; int height = 0 ; int childCount = getChildCount(); Log.i("Test", getPaddingLeft() &#; "==right=" &#;getPaddingRight()); for (int i = 0; i < childCount; i&#;&#;) { View childView = getChildAt(i); measureChild(childView, widthMeasureSpec, heightMeasureSpec); MarginLayoutParams params = (MarginLayoutParams) childView.getLayoutParams(); int childWidth = childView.getMeasuredWidth() &#; params.leftMargin &#; params.rightMargin ; int childHeight = childView.getMeasuredHeight() &#; params.topMargin &#; params.bottomMargin ; if ((lineWidth &#; childWidth ) > widthSize - getPaddingLeft() - getPaddingRight() ) { width = Math.max(width, lineWidth); lineWidth = childWidth ; height &#;= lineHeight ; lineHeight = childHeight; }else { lineWidth &#;= childWidth ; lineHeight = Math.max(lineHeight, childHeight); } if (i == childCount-1) { width = Math.max(width, lineWidth); height &#;= lineHeight ; } } height &#;= getPaddingTop() &#; getPaddingBottom() ; setMeasuredDimension(widthMode == MeasureSpec.EXACTLY?widthSize:width, heightMode == MeasureSpec.EXACTLY?heightSize:height); }2.onLayout 布局 @Override protected void onLayout(boolean a, int l, int t, int r, int b) { childViewList.clear(); int childCount = getChildCount() ; int width = getWidth(); int lineWidth = 0 ; int lineHeight = 0 ; List<View> lineViews = new ArrayList<View>(); for (int i = 0; i < childCount; i&#;&#;) { View childView = getChildAt(i); MarginLayoutParams params = (MarginLayoutParams) childView.getLayoutParams(); int childWidth = childView.getMeasuredWidth() &#; params.leftMargin &#; params.rightMargin ; int childHeight = childView.getMeasuredHeight() &#; params.topMargin &#; params.bottomMargin ; if (lineWidth &#; childWidth > width - getPaddingLeft() - getPaddingRight()) { childViewList.add(lineViews); lineViews = new ArrayList<View>(); if (i == 0 ) { lineHeight &#;= getPaddingTop() ; }else if (i== childCount - 1) { lineHeight &#;= getPaddingBottom() ; } this.lineHeight.add(lineHeight); lineHeight = 0 ; lineWidth = 0 ; } lineWidth &#;= childWidth; lineHeight = Math.max(lineHeight, childHeight) ; lineViews.add(childView); } childViewList.add(lineViews); this.lineHeight.add(lineHeight); int left = getPaddingLeft() ; int top = getPaddingTop(); for (int i = 0; i < childViewList.size(); i&#;&#;) { lineViews = childViewList.get(i); for (int j = 0; j < lineViews.size(); j&#;&#;) { View childView = lineViews.get(j); MarginLayoutParams params = (MarginLayoutParams) childView.getLayoutParams(); int lc = left &#; params.leftMargin ; int tc = top &#; params.topMargin ; int rc = lc &#; childView.getMeasuredWidth() ; int bc = tc &#; childView.getMeasuredHeight() ; childView.layout(lc,tc,rc,bc); left &#;= params.leftMargin &#; childView.getMeasuredWidth() &#; params.rightMargin ; } left = getPaddingLeft() ; top &#;= this.lineHeight.get(i) ; } }代码下载地址: 百度网盘:

版权声明:本文为博主原创文章,未经博主允许不得转载。

WebView控件应用——模仿URL有道词典 一、项目开发1、开发介绍本项目是用WebView控件模仿网上有道词典,WebSettings中有很多关于WebView的设置,这里列出几个常用的方法:1)、//得到WebSettings

android开发步步为营之:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题 最近项目里面有个需求,一个页面放了一个ScrollView,整个页面可以向上滚动,然后ScrollView里面又嵌套了一个ListView,ListView里面的数据也是可以上下滑

Android开源SlidingMenu的使用 SlidingMenu是Android上的一个侧滑菜单,如下图所示:今天主要记录的是SlidingMenu的使用,我们可以从Github上下载该开源项目,下载地址是:

标签: android自定义控件入门与实战

本文链接地址:https://www.jiuchutong.com/biancheng/371007.html 转载请保留说明!

上一篇:Android学习【Android内核编译流程和错误笔记】(android入门视频教程)

下一篇:WebView控件应用——模仿URL有道词典(web ui控件)

  • 进项税认证后转出
  • 银行电子回单有没有法律效应
  • 当期免抵税额如何做账
  • 公司端午礼盒
  • 购销合同需要盖合同章吗
  • 手写报销单据格式图片
  • 个税返还手续费奖励员工需要交个税吗
  • 滞纳金海关
  • 高新技术企业在增值税有什么优惠
  • 企业收到赔偿款要交税吗
  • 库存商品毁损会导致什么
  • 银行抵债资产处置需要缴纳什么税费
  • 工地上汽车加油怎么加
  • 转让购入的设备税率
  • 企业注销后资产如何处置
  • 佣金发票可以抵扣吗
  • 剑灵玩一会就崩溃
  • 辅导期纳税人领票预缴税款
  • 安卓手机数据迁移到红米手机
  • 如何使用php编程软件
  • fsm32.exe是什么进程 有什么作用 fsm32进程查询
  • php 设计模式
  • fs是什么文件
  • 茶叶的种类有哪些,八大茶类你都知道吗?
  • php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
  • 支付投资款怎么做账
  • 公司需要购买物品
  • web无法运行
  • 展开双翅的绯红之花
  • php合并字符串函数
  • 深入node.js技术栈
  • 公司有收入可不交社保吗
  • 会计账的银行存款与银行存款不一致 是属于账账不符吗
  • 微擎框架安装教程
  • 购买图书可以开增值税专票么?
  • 帝国cms生成app
  • 为什么结转材料成本差异
  • 销售农产品是否交消费税
  • 核定扣除投入产品怎么算
  • 税控盘减免税款怎么结转
  • 补贴收入是否缴纳个税
  • 托收承付和委托收款区别
  • 公司如果不交社保会怎么样
  • 委托代销商品是什么科目
  • 诉讼费应计入什么会计科目
  • 盈余公积转增实收资本对会计要素的影响
  • 划拨土地使用权管理暂行办法
  • 结转存货跌价准备是什么意思
  • 差旅费的进项税率是多少
  • 购买电脑增值税税率是多少
  • 税局代开专用发票时交的钱如何记账?
  • 水费能抵扣进项税吗
  • 防伪税控费用抵税分录
  • 百旺金赋领回来的发票怎么读入
  • 无形资产减值准备是什么科目
  • mysql8高可用
  • mssqlserveradhelper
  • 电脑win7win8win10操作系
  • win8.1怎么安装appx没有许可证
  • linux必学的100个命令
  • linux jre
  • Win7中TrustedInstaller.exe进程占用内存高该怎么解决?
  • win10无法安装无线显示器
  • linux git管理工具
  • 实例的英文
  • opengl编程实例
  • opengl示例
  • javascript HTML5 Canvas实现圆盘抽奖功能
  • 如何做好设计师
  • jquery 点击按钮
  • javascript 作用
  • [置顶]从lv2开始开挂的原勇者候悠闲的异世界生活
  • javascript面向对象吗
  • js新年倒计时
  • js怎么判断日期大小
  • 车船税是比例还是定额
  • 环保税的税率是怎么算的
  • 福建电子税务局登录入口
  • 车辆购置税查询电话
  • 城市土地使用税计税依据
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设