全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

android流式布局onLayout()方法详解

在上一篇中及就写了自定义view中的onMeausre()和onDraw()两个方法。在这里就用简单的流式布局来介绍一下onLayout()方法。

在onLayout方法中有四个参数,我画了一个简单的图来分清楚值哪里。

 

好啦,现在就直接看代码吧。

FlowLayout.Java 

package com.example.my_view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

/**
 * 自定义布局 流布局
 */

public class FlowLayout extends ViewGroup {
  public FlowLayout(Context context) {
    super(context);
  }

  public FlowLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  /**
   *
   * @param changed
   * @param l 左
   * @param t 上
   * @param r  右
   * @param b  下
   */
  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    //获得子控件的数量
    int childCount = getChildCount();
    //当前子控件的左边坐标
    int cl = 0;
    //当前子控件的上边坐标
    int ct = 0;
    //ViewGroup整体宽度
    int width = r - l;
    //行高
    int lineHeight = 0;
    //遍历所有子控件
    for(int i = 0; i < childCount; i++){
      //获取当前控件
      View childAt = getChildAt(i);
      //获取宽度
      int cw = childAt.getMeasuredWidth();
      //获取高度
      int ch = childAt.getMeasuredHeight();
      //当前控件右边
      int cr = cl + cw;
      //当前控件下边
      int cb = ct + ch;
      //判断是否换行
      if(cr > width){
        //如果换行重新计算上下左右地值
        cl = 0;
        cr = cl + cw;
        ct += lineHeight;
        cb = ct + ch;
        //换行后,第一个控件作为最大行高
        lineHeight = ch;
      }else{
        //如果不换行,需要计算最大高度
        lineHeight = Math.max(lineHeight,ch);
      }
      childAt.layout(cl,ct,cr,cb);
      //横向向后移动一个,前面控件的右边作为后面控件的左边
      cl = cr;
    }
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //测量所有子控件
    measureChildren(widthMeasureSpec, heightMeasureSpec);
  }
}

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<com.example.my_view.FlowLayout
  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="com.example.my_view.MainActivity">
<!--
<com.example.my_view.Counter
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  app:number="10"
  app:bgColor="#ff002b"
  app:textColor="#0fd444"/>-->
<!--<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="我在自定义布局的下面"/>-->
  <Button
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:text="button1"/>
  <Button
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:text="button2"/>
  <Button
    android:layout_width="180dp"
    android:layout_height="60dp"
    android:text="button3"/>
  <Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="button4"/>
  <Button
    android:layout_width="80dp"
    android:layout_height="100dp"
    android:text="button5"/>
  <Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="button6"/>
  <Button
    android:layout_width="120dp"
    android:layout_height="70dp"
    android:text="button7"/>
  <Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="button8"/>
</com.example.my_view.FlowLayout>

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # 流式布局  # onLayout  # Android流式布局FlowLayout详解  # Android流式布局实现历史搜索记录功能  # Android实现热门标签的流式布局  # Java Swing组件布局管理器之FlowLayout(流式布局)入门教程  # Android简单实现自定义流式布局的方法  # Android自定义ViewGroup之实现FlowLayout流式布局  # Android 简单实现一个流式布局的示例  # Android自定义流式布局/自动换行布局实例  # python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)  # Flexbox+ReclyclerView实现流式布局  # 自定义  # 换行  # 在这里  # 我在  # 第一个  # 遍历  # 中有  # 上下左右  # 写了  # 就用  # 在上  # 介绍一下  # 好啦  # 画了  # 大家多多  # 大行  # 判断是否  # 流式  # public  # super 


相关文章: 企业微网站怎么做,公司网站和公众号有什么区别?  专业网站建设制作报价,网页设计制作要考什么证?  ,网页ppt怎么弄成自己的ppt?  如何在VPS电脑上快速搭建网站?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何选择靠谱的建站公司加盟品牌?  网站微信制作软件,如何制作微信链接?  中山网站推广排名,中山信息港登录入口?  微信小程序 五星评分(包括半颗星评分)实例代码  建站主机SSH密钥生成步骤及常见问题解答?  创业网站制作流程,创业网站可靠吗?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  如何快速建站并高效导出源代码?  南宁网站建设制作定制,南宁网站建设可以定制吗?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  清除minerd进程的简单方法  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  html制作网站的步骤有哪些,iapp如何添加网页?  江苏网站制作公司有哪些,江苏书法考级官方网站?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何在阿里云完成域名注册与建站?  购物网站制作公司有哪些,哪个购物网站比较好?  Bpmn 2.0的XML文件怎么画流程图  网站制作模板下载什么软件,ppt模板免费下载网站?  焦点电影公司作品,电影焦点结局是什么?  建站之星2.7模板快速切换与批量管理功能操作指南  如何注册花生壳免费域名并搭建个人网站?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何快速上传建站程序避免常见错误?  广东企业建站网站优化与SEO营销核心策略指南  如何制作网站标识牌,动态网站如何制作(教程)?  建站主机与虚拟主机有何区别?如何选择最优方案?  如何高效利用200m空间完成建站?  高端网站建设与定制开发一站式解决方案 中企动力  北京网站制作公司哪家好一点,北京租房网站有哪些?  C++如何编写函数模板?(泛型编程入门)  广州营销型建站服务商推荐:技术优势与SEO优化解析  建站之星安装后如何自定义网站颜色与字体?  建站主机如何选?性能与价格怎样平衡?  如何通过虚拟主机快速完成网站搭建?  宝塔建站助手安装配置与建站模板使用全流程解析  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  建站主机空间推荐 高性价比配置与快速部署方案解析  如何通过商城免费建站系统源码自定义网站主题?  建站主机无法访问?如何排查域名与服务器问题  IOS倒计时设置UIButton标题title的抖动问题  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何通过服务器快速搭建网站?完整步骤解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。