首先是效果图
自定义控件里
package haoran.bwie.com.liushi4;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MyFloatLayout extends LinearLayout {
private int mScreenWidth;
public MyFloatLayout(Context context, AttributeSet attrs) {
super(context, attrs);
//获取屏幕的宽高
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
//赋值屏幕的宽
mScreenWidth = displayMetrics.widthPixels;
//设置布局垂直显示
setOrientation(VERTICAL);
}
//初始化子线性布局
private LinearLayout getLin() {
//new出一个线性布局
LinearLayout linearLayout = new LinearLayout(getContext());
//设置线性布局的宽高 LayoutParams是控制组件大小的一个工具类
LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
//添加进去
linearLayout.setLayoutParams(layoutParams);
//添加到MyFloatLayout里
this.addView(linearLayout);
return linearLayout;
}
private TextView getText() {
//创建一个textview
TextView textView = new TextView(getContext());
//设置字体的大小和颜色
textView.setTextSize(25);
textView.setTextColor(Color.BLUE);
return textView;
}
public void setData(String[] data) {
//调用方法新建布局
LinearLayout lin = getLin();
for (int i = 0; i < data.length; i++) {
String datum = data[i];
int numwidth = 0;
//得到此行有多少子控件
int childCount = lin.getChildCount();
for (int j = 0; j < childCount; j++) {
//获取线性布局里的textview的数量
TextView textView = (TextView) lin.getChildAt(j);
LayoutParams layoutParams = (LayoutParams) textView.getLayoutParams();
int leftMargin = layoutParams.leftMargin;
//测量tetview的高度和宽度
textView.measure(getMeasuredWidth(), getMeasuredHeight());
//textview的边距加宽度
numwidth += textView.getMeasuredWidth() + leftMargin;
}
//新建textview
TextView text = getText();
//LayoutParams 控制组件大小的一个工具类
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
//设置左边距和上边距
params.leftMargin = 10;
params.topMargin = 2;
text.setLayoutParams(params);
//给textview添加值
text.setText(datum);
//测量tetview的高度和宽度
text.measure(getMeasuredWidth(), getMeasuredHeight());
int measuredWidth = text.getMeasuredWidth();
//判断如果行宽大于textview的总宽度+当前textview的总宽度
if (mScreenWidth >= numwidth + measuredWidth) {
lin.addView(text);
} else {
//重新起一行
lin = getLin();
lin.addView(text);
}
}
}
}
mainactivity里
package haoran.bwie.com.liushi4;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private String[] data = {"阿斯顿发生", "儿童观", "虚", "阿尔戈问过", "阿瑟发二十", "人挺好人", "多线程bear", "的复印件儿童和问题", "的做法GV", "CVBS", "让他加"};
private MyFloatLayout myview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
myview.setData(data);
}
private void initView() {
myview = (MyFloatLayout) findViewById(R.id.myview);
}
}
main的xml布局里引用自定义控件