Android自定义View之实现流式布局

Posted fakerXuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android自定义View之实现流式布局相关的知识,希望对你有一定的参考价值。

android自定义View之实现流式布局

  • 流式布局
    把子控件从左到右摆放,如果一行放不下,自动放到下一行
  • 自定义布局流程
    1. 自定义属性:声明,设置,解析获取自定义值 在attr.xml中声明
    2. 测量:在onMeasure 方法测量自身的宽高和child的宽高
    3. 布局:在onLayout方法里面根据自己的规则来确定children的位置
    4. 绘制:onDraw
    5. 处理layoutParams
    6. 触摸反馈:滑动事件
  • 代码实现
    属性定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="FlowLayout">
        <attr name="android:gravity"/>
        <attr name="android:horizontalSpacing" format="dimension |reference"/>
    </declare-styleable>
    <declare-styleable name="FlowLayout_Layout">
        <attr name="android:layout_gravity"/>
    </declare-styleable>
</resources>
  • 布局文件
<?xml version="1.0" encoding="utf-8"?>
    <!--<ScrollView 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"-->
    <!--xmlns:tools="http://schemas.android.com/tools">-->
<LinearLayout 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:orientation="vertical"
android:layout_height="match_parent">


<com.example.as.proj.myviewgroupdemo2.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=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="55dp"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="90dp"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="85dp"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="75dp"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="85dp"
        android:text="小麻小儿郎呀" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="85dp"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="85dp"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="65dp"
        android:text="生活不止眼前的苟且,还有诗和远方" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:text="发电房" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小麻小儿郎呀" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="75dp"
        android:text="Hello hi ..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你是谁呀" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="人在他在,塔亡人亡"
        android:layout_gravity="bottom"/>

    <Button
        android:layout_width="wrap_content"
   

以上是关于Android自定义View之实现流式布局的主要内容,如果未能解决你的问题,请参考以下文章

Android 中自定义ViewGroup实现流式布局的效果

Android自定义ViewGroup,onMeasureonLayout,实现流式布局

Android之自定义流式布局FlowLayout

Android自定义ViewGroup的布局,往往都是从流式布局开始

Android--View自定义—标签<流式布局;

Android 自定义ViewGroup之实现FlowLayout-标签流容器