drawable 下的shape.xml页面:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#C0C0C0" />
<stroke
android:width="1dip"
android:color="#C0C0C0" />
<padding
android:bottom="5dp"
android:left="12dp"
android:right="12dp"
android:top="5dp" />
<corners android:radius="80dp" />
</shape>
布局sub_item.xml页面:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_attr_tag"
android:layout_margin="10dp"
android:background="@drawable/shape"
/>
</LinearLayout>
CustomView:
public class CustomView extends ViewGroup {
private int mleftMargin=20;
private int mtopMargin=20;
public CustomView(Context context) {
this(context,null);
}
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec,heightMeasureSpec);
int leftMargin = mleftMargin;
int topMargin = mtopMargin;
int viewHeight = 0;
int viewWidth = 0;
//父控件传进来的宽度和高度以及对应的测量模式
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
switch (modeHeight){
case MeasureSpec.AT_MOST:
int measuredHeight = 0;
for (int j = 0; j < getChildCount(); j++) {
int measuredWidth = getChildAt(j).getMeasuredWidth();
measuredHeight = getChildAt(j).getMeasuredHeight();
if (leftMargin+measuredWidth+mleftMargin>getWidth()){
leftMargin=mleftMargin;
topMargin+=measuredHeight+mtopMargin;
}
leftMargin+=measuredWidth+mleftMargin;
}
topMargin+=measuredHeight+mtopMargin;
break;
}
setMeasuredDimension(sizeWidth,topMargin);
}
@Override
protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
int leftMargin = mleftMargin;
int topMargin = mtopMargin;
for (int j = 0; j < getChildCount(); j++) {
int measuredWidth = getChildAt(j).getMeasuredWidth();
int measuredHeight = getChildAt(j).getMeasuredHeight();
if (leftMargin+measuredWidth+mleftMargin>getWidth()){
leftMargin=mleftMargin;
topMargin+=measuredHeight+mtopMargin;
getChildAt(j).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
}else {
getChildAt(j).layout(leftMargin,topMargin,leftMargin+measuredWidth,topMargin+measuredHeight);
}
leftMargin+=measuredWidth+mleftMargin;
}
}
}
activity_main.xml:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape"
android:orientation="horizontal">
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/edt"
android:textColorHighlight="#ff44ff"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入搜索内容" />
</FrameLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:id="@+id/but"
android:background="#808080"
android:textSize="20dp"
android:text="搜索" />
</LinearLayout>
<com.bwie.yuekao.ziview.CustomView
android:id="@+id/afl_cotent"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
MainActivity:
public class MainActivity extends AppCompatActivity {
private EditText edt;
private Button but;
private CustomView afl_cotent;
private LayoutInflater layoutInflater;
private TextView tvAttrTag;
private List<String> list2 = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
edt = findViewById(R.id.edt);
but = findViewById(R.id.but);
afl_cotent = findViewById(R.id.afl_cotent);
layoutInflater = LayoutInflater.from(this);
//点击搜索按钮添加到历史记录
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取输入框内容
String s = edt.getText().toString();
//判断输入框内容不可为空
if (!TextUtils.isEmpty(s)){
View item = layoutInflater.inflate(R.layout.sub_item, null);
tvAttrTag = item.findViewById(R.id.tv_attr_tag);
list2.add(s);
for (int i = 0; i < list2.size(); i++) {
tvAttrTag.setText(list2.get(i));
}
afl_cotent.addView(item);
//点击流式布局跳转购物车页面
afl_cotent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
});
}
}
效果图: