流式布局

来源:互联网 发布:three.js入门指南 编辑:程序博客网 时间:2024/06/06 02:23

//activity_main

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.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="com.example.liushi.MainActivity">    <com.example.liushi.Liu        android:layout_width="wrap_content"        android:layout_height="wrap_content">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="原谅我" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="这一生" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="不羁放纵" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="爱自由" />    </com.example.liushi.Liu></android.support.constraint.ConstraintLayout>
//Liu
package com.example.liushi;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;/** * Created by 哥哥 on 2017/12/5 0005. */public class Liu extends ViewGroup {    public Liu(Context context) {        super(context);    }    public Liu(Context context, AttributeSet attrs) {        super(context, attrs);    }    public Liu(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    //测量    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        //测量子view        measureChildren(widthMeasureSpec, heightMeasureSpec);    }    //绘制的方法    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);    }    //用来确定子view的位置    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        //初始化子view的宽高        int wid = 0;        int hei = 0;        //得到子view的个数        int childcount = getChildCount();        for (int i = 0; i < childcount; i++) {            //得到这个viewgroup里面的每一个子view            View childView = getChildAt(i);            //得到每一个子view的宽高            int width = childView.getMeasuredWidth();            int height = childView.getMeasuredHeight();            //确定子view的高度            childView.layout(wid, hei, wid + width, hei + height);            //累加所有子view宽高            wid += width;            hei += height;        }    }}
//MainActivity
package com.example.liushi;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}