自定义viewGroup
一、ViewGroup概述
1、ViewGroup是一个容器,而这个容器是继承与View的。
2、ViewGroup是一个基类,并且是Layout和一些View组件的基类。
二、ViewGroup的三个方法
1、onLayout方法
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
在我们继承ViewGroup时会在除了构造函数之外提供这个方法,我们可以看到,在ViewGroup的源代码中方法是这样定义的,也就是父类没有提供方法的内容,需要我们自己实现。
当View要为所有子对象分配大小和位置时,调用此方法
2、addView方法
public void addView(View child) {
addView(child, -1);
}
a.可以是:条目布局
//加载条目布局
一:
LayoutInflater.from(context).inflate(R.layout.input_number_view, this, true);
二:
View view = LayoutInflater.from(context).inflate(R.layout.input_number_view, this, false);
addView(view);
这个方法是用来向View容器中添加组件用的。我们可以使用这个方法想这个ViewGroup中添加组件。
3、getChildAt方法
public View getChildAt(int index) {
if (index < 0 || index >= mChildrenCount) {
return null;
}
return mChildren[index];
}
这个方法用来返回指定位置的View
小练习:流式布局
package com.example.customviewfortutu;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* 流式布局
* 2022/11/8
*/
public class FlowLayout extends ViewGroup {
/**
* 水平间距
*/
private int mHorizontalMargin = 40;
/**
* 垂直间距
*/
private int mVerticalMargin = 40;
public FlowLayout(Context context) {
this(context, null);
}
public FlowLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
List<String> dataList = new ArrayList<>();
dataList.add("格纹大衣");
dataList.add("网面鞋子清洁");
dataList.add("鞋子清洁");
dataList.add("鞋子塑封膜");
dataList.add("早秋chic上衣甜辣");
dataList.add("打底ins");
dataList.add("打底");
dataList.add("冬天懒人鞋");
dataList.add("冬鞋一脚蹬");
dataList.add("冬鞋");
dataList.add("格纹大衣");
dataList.add("网面鞋子清洁");
dataList.add("鞋子清洁");
dataList.add("鞋子塑封膜");
dataList.add("早秋chic上衣甜辣");
dataList.add("打底ins");
dataList.add("打底");
dataList.add("冬天懒人鞋");
dataList.add("冬鞋一脚蹬");
dataList.add("冬鞋");
setData(dataList);
}
//设置数据
public void setData(List<String> dataList) {
for (String s : dataList) {
TextView textView = new TextView(getContext(