- 效果图
我们就简单的实现一个布局,在其中加入控件的时候,当一行的空间不够的时候,实现子控件的自动换行的功能。
public class MyViewGroup extends ViewGroup {
public MyViewGroup(Context context) {
super(context);
}
public MyViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int w=getMeasuredWidth();
int width = 0;
int heightNum=0;
for (int i = 0; i < getChildCount(); i++) {
View childView = getChildAt(i);
int childWidth = childView.getMeasuredWidth();
int childHeigh = childView.getMeasuredHeight();
if (childWidth <= w-width) {
childView.layout(width, heightNum*childHeigh, childWidth+width, childHeigh+heightNum*childHeigh);
width += childWidth;
} else {
width=0;
heightNum=heightNum+1;
childView.layout(width, heightNum*childHeigh, childWidth+width, childHeigh+heightNum*childHeigh);
width += childWidth;
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec, heightMeasureSpec);
}
}
- 在布局中引用这个自定义的ViewGroup就可以了
<com.lingzhuo.testmyownview01.view.MyViewGroup
android:layout_width="match_parent"
android:layout_height="100dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键4" />
</com.lingzhuo.testmyownview01.view.MyViewGroup>