天天看点

自定义view流式布局布局

实现流程

首先需要三个LinearLayout布局

第一个垂直布局

第二个水平布局

第三个放一个文本

布局

**

第一个垂直布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:id="@+id/layout_v"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

</LinearLayout>
           

## 第二个水平布局 <?xml version="1.0" encoding="utf-8"?>

第三个放一个文本

<TextView
    android:id="@+id/txt"
    android:textSize="40dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@drawable/myshape"
    android:text="标题" />
           

## 自定义View中

**

import android.content.Context;

import android.support.annotation.Nullable;

import android.util.AttributeSet;

import android.view.View;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

import com.umeng.soexample.R;

import java.util.List;

public class LiuView extends RelativeLayout {

private LinearLayout view;

private Context mcontext;

private LinearLayout layoutv;

private LinearLayout layouth;

public LiuView(Context context) {
    super(context);
    initView(context);
}

public LiuView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    initView(context);

}

public LiuView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView(context);

}

private void initView(Context context) {
    //初始化上下文
    this.mcontext = context;
    //获取垂直布局
    view = (LinearLayout) View.inflate(context, R.layout.layout_item_v, null);
    layoutv = (LinearLayout) view.findViewById(R.id.liu_v);
    //添加到this.addView
    this.addView(view);
}

public void getData(List<String> data) {
    /*
     * 写一个方法,调用setList(String集合)
     * */
    setList(data);
}

private void setList(List<String> list) {
    //初始化横向布局,初始化横向布局之前remove垂直布局,找控件,添加到横向布局,之后remove横向布局
    layoutv.removeAllViews();
    layouth = (LinearLayout) View.inflate(mcontext, R.layout.layout_item_h, null);
    layoutv.addView(layouth);
    layouth.removeAllViews();
    String s = "";
    int len = 0;
    for (int i = 0; i < list.size(); i++) {
        s = list.get(i);
        len += i;
        if (i == 20) {
            layouth = (LinearLayout) View.inflate(mcontext, R.layout.layout_item_h, null);
            layoutv.addView(layouth);
            len = 0;
        }
        //找文本控件 赋值
        LinearLayout layouttxt = (LinearLayout) View.inflate(mcontext, R.layout.layout_item_txt, null);
        TextView txt=(TextView) layouttxt.findViewById(R.id.liu_txt);
        txt.setText(s);
        layouth.addView(layouttxt);
        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) txt.getLayoutParams();
        layoutParams.weight=1;
        layoutParams.rightMargin=10;
        layoutParams.leftMargin=10;
        txt.setLayoutParams(layoutParams);
    }
}
           

**

JAVA代码

**

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.EditText;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private List list = new ArrayList<>();

private EditText edtxt;

private LiuView liuView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    edtxt = findViewById(R.id.ed_txt);
    liuView = findViewById(R.id.liuview);

    findViewById(R.id.bt_sele).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String trim = edtxt.getText().toString().trim();
            list.add(trim);
            Log.d("TAG",list.toString());
            liuView.setData(list);
        }
    });
}
           

}

继续阅读