//流式布局的写法
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.myview.R;
import com.example.myview.utils.DisPlayUtils;

import java.util.ArrayList;

/**
* 继承的ViewGroup的子类容器布局
*/
public class MyFlowLayout extends LinearLayout {
private int mScrrenWidth;
private int dpValue;
private int dpValueTwo;
private int positon;

public MyFlowLayout(Context context, AttributeSet attrs) {
super(context, attrs);
//得到屏幕的宽
mScrrenWidth = getResources().getDisplayMetrics().widthPixels;
//把dp专程px
dpValue = DisPlayUtils.dip2px(8, getResources().getDisplayMetrics().density);
dpValueTwo = DisPlayUtils.dip2px(5, getResources().getDisplayMetrics().density);
setOrientation(VERTICAL);
}

public void setAdapter(ArrayList<String> list, final ClickItem clickItem) {//{"lvxx","memeda"}
LinearLayout linearLayout = getLine();
for (int i = 0; i < list.size(); i++) {

int numWidth = 0;
//getChildCount获取它里面的所有子控件
for (int j = 0; j < linearLayout.getChildCount(); j++) {
TextView tv = (TextView) linearLayout.getChildAt(j);
//为了左边距和右边距
LayoutParams params = (LayoutParams) tv.getLayoutParams();
//测量TextView的宽和高
//参数1:返回此视图的原始测量宽度 参数2:返回此视图的原始测量高度
tv.measure(getMeasuredWidth(), getMeasuredHeight());
int tvWidth = tv.getMeasuredWidth() + params.rightMargin + params.leftMargin + tv.getPaddingLeft() + tv.getPaddingRight();
numWidth += tvWidth;
}

TextView tv = getText();
LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.leftMargin = dpValue;
layoutParams.rightMargin = dpValue;
layoutParams.topMargin = dpValue;
tv.setLayoutParams(layoutParams);
tv.setText(list.get(i) + "");
tv.measure(getMeasuredWidth(), getMeasuredHeight());
positon = i;
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (clickItem != null) {
clickItem.onItemClick(positon);
}
}
});

int measuredWidth = tv.getMeasuredWidth();
if (mScrrenWidth > (numWidth + measuredWidth)) {
linearLayout.addView(tv);
} else {
linearLayout = getLine();
linearLayout.addView(tv);
}

}

}

//每行要展示的布局
private LinearLayout getLine() {
LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
this.addView(linearLayout);
return linearLayout;
}

//初始化TextView用来展示数据
private TextView getText() {
TextView tv = new TextView(getContext());
tv.setTextSize(16);
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
tv.setBackgroundResource(R.drawable.text_style);
tv.setPadding(dpValue, dpValueTwo, dpValue, dpValueTwo);
return tv;
}

public interface ClickItem {
void onItemClick(int position);
}
}

//主页面要执行的操作
/**
* 流式布局
* 应用场景 搜索记录
*/
public class MainActivity extends AppCompatActivity {
private MyFlowLayout myFlowLayout;
private ArrayList<String> mlist = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initViews();
//调用了两遍方法
myFlowLayout.setAdapter(mlist, new MyFlowLayout.ClickItem() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, mlist.get(position), Toast.LENGTH_SHORT).show();
}
});
myFlowLayout.setAdapter(mlist, new MyFlowLayout.ClickItem() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, mlist.get(position), Toast.LENGTH_SHORT).show();
}
});
}

private void initData() {
mlist.add("吕英俊");
mlist.add("吕潇洒");
mlist.add("吕小帅");
mlist.add("赵丑八怪");
mlist.add("成鱼落雁");
mlist.add("王锐");
mlist.add("郑可心");
}

private void initViews() {
myFlowLayout = findViewById(R.id.My_Flow_Layout);
}
}