一:布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="activity.example.com.baikaijun20171104.FlowActivity">
<activity.example.com.baikaijun20171104.view.MyView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:background="#619EA0"
android:layout_width="120dp"
android:layout_height="50dp" />
<TextView
android:background="#7561A0"
android:layout_width="120dp"
android:layout_height="50dp" />
<TextView
android:background="#9FA061"
android:layout_width="120dp"
android:layout_height="50dp" />
</activity.example.com.baikaijun20171104.view.MyView>
</RelativeLayout>
二:创建类,继承ViewGroup
public class MyView extends ViewGroup{
public MyView(Context context) {
this(context,null);
}
public MyView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//测量自己子类控件的宽度
measureChildren(widthMeasureSpec,heightMeasureSpec);
}
@Override
protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
//获取子控件的数量
int count = getChildCount();
//设置默认起始值
int startWidth = 0;
int startHeight = 0;
//循环遍历子控件
for (int j = 0; j < count; j++) {
//取出每一条子视图
View v = getChildAt(j);
// 注释部分可实现流式布局,内容满之后换行
// if(startWidth+v.getMeasuredWidth()>getMeasuredWidth())
// {
// startHeight+=v.getMeasuredHeight();
// startWidth = 0;
// }
//给每一个子视图设置定位
v.layout(startWidth,startHeight,startWidth+v.getMeasuredWidth(),startHeight+v.getMeasuredHeight());
startWidth+=v.getMeasuredWidth();
startHeight+=v.getMeasuredHeight();
}
}
}