FlowLayout类
package com.bw.treasure.makeoview;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.LinearLayout;
import android.widget.TextView;
public class FloatLayout extends LinearLayout {
private int widthSccren;
private int heightSccren;
public FloatLayout(Context context) {
this(context,null);
}
public FloatLayout(Context context, AttributeSet attrs) {
this(context, attrs,-1);
}
public FloatLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//把方向改为垂直
setOrientation(VERTICAL);
//获取屏幕宽高
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
widthSccren=displayMetrics.widthPixels;
//注意高度不需要
heightSccren=displayMetrics.heightPixels;
}
public void setAdapter(String[] data){
//去掉所有的子view
removeAllViews();
innerSetAdapter(data);
}
public void add(String[] data) {
innerSetAdapter(data);
}
private void innerSetAdapter(String[] data){
LinearLayout linearLayout = iniHorL();
for (int i = 0; i < data.length; i++) {
String temp = data[i];
int childCount = linearLayout.getChildCount();
int totalWith=0;
for (int j = 0; j <childCount ; j++) {
int measuredWidth = linearLayout.getMeasuredWidth();
TextView childAt = (TextView) linearLayout.getChildAt(j);
//一定要调用一次测量方法
childAt.measure(getMeasuredWidth(),getMeasuredHeight());
int width = childAt.getMeasuredWidth();
LinearLayout.LayoutParams layoutParams = (LayoutParams) childAt.getLayoutParams();
totalWith+=width+layoutParams.leftMargin;
}
final TextView textView = iniTextView();
LinearLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity=Gravity.CENTER;
params.leftMargin=10;
params.topMargin=10;
params.bottomMargin=10;
textView.setText(temp);
textView.measure(getMeasuredWidth(),getMeasuredHeight());
int measuredWidth = textView.getMeasuredWidth();
if (widthSccren>= totalWith+ measuredWidth+params.leftMargin) {
linearLayout.addView(textView,params);
}else {
//这里注意不能新声明变量
linearLayout = iniHorL();
linearLayout.addView(textView,params);
}
}
}
private LinearLayout iniHorL(){
LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(HORIZONTAL);
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
this.addView(linearLayout,params);
return linearLayout;
}
private TextView iniTextView(){
TextView textView = new TextView(getContext());
textView.setTextColor(Color.parseColor("#ff0000"));
textView.setTextSize(20);
return textView;
}
}
MainActivity文件
package com.bw.treasure.makeoview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private String[] desc = new String[]{“优秀”,“邯郸学步”,“优秀”,“邯郸学步”,“东施效颦”,“东施效颦”,“优秀”,“邯郸学步”,“东施效颦”,
“优秀”,“邯郸学步”,“东施效颦”,“优秀”,“优秀”,“邯郸学步”,“东施效颦”,“邯郸学步”,“东施效颦”,“优秀”,“邯郸学步”,“东施效颦”,“优秀”,“邯郸学步”,“东施效颦”};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FloatLayout viewById = findViewById(R.id.floatlayout);
viewById.setAdapter(desc);
viewById.add(desc);
}
}