(一)MainActivity主布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="zhangyanran201800920.bwie.com.gouwuche.activity.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/edt"
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:id="@+id/but"
android:text="搜索"
android:background="#808080"/>
</LinearLayout>
//实现自定义布局
<zhangyanran201800920.bwie.com.gouwuche.widget.CustomView
android:id="@+id/afl_cotent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
(二)MainActivity逻辑代码
public class MainActivity extends AppCompatActivity {
private EditText edt;
private Button but;
private CustomView afl_cotent;
private LayoutInflater layoutInflater;
private TextView tv_attr_tag;
private List<String> list = 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) {
//获取edit内容
String s = edt.getText().toString();
//加载子布局
View item = layoutInflater.inflate(R.layout.sub_item, null);
tv_attr_tag = item.findViewById(R.id.tv_attr_tag);
list.add(s);
for (int i = 0; i < list.size(); i++) {
tv_attr_tag.setText(list.get(i));
tv_attr_tag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, CartActivity.class);
startActivity(intent);
}
});
}
afl_cotent.addView(item);
}
});
}
}
(二.1)记载子条目的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_attr_tag"
android:layout_margin="10dp"
/>
</LinearLayout>
(三)自定义类的逻辑代码
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 sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
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;
}
}
}
(第三方流式布局)
依赖 : implementation 'com.fyales.android:library:1.0.2'
主布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="zhangyanran201800924.bwie.com.jineng.activity.ShowActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/edt"
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:id="@+id/add_btn"
android:text="搜索"
android:background="#808080"/>
</LinearLayout>
<com.fyales.tagcloud.library.TagCloudLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="500dp"
app:tagSpacing="15dp"
app:lineSpacing="10dp"/>
</LinearLayout>
java代码:
public class ShowActivity extends AppCompatActivity {
private Button but;
private List<String> list = new ArrayList<>();
private TagCloudLayout mContainer;
private ArrayList<String> mList;
private TagBaseAdapter mAdapter;
private EditText edt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
//initView();
edt = findViewById(R.id.edt);
mContainer = findViewById(R.id.container);
mList = new ArrayList<>();
mAdapter = new TagBaseAdapter(this, mList);
findViewById(R.id.add_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = edt.getText().toString();
mList.add(s);
mAdapter.notifyDataSetChanged();
}
});
mContainer.setAdapter(mAdapter);
mContainer.setItemClickListener(new TagCloudLayout.TagItemClickListener() {
@Override
public void itemClick(int position) {
Intent intent = new Intent(ShowActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}