自定义view实现流式布局

MainActivity 主要是实例化集合 已经给搜索历史赋值

package mlb.bawei.com.d05_test01;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import mlb.bawei.com.d05_test01.View.InsertView;
import mlb.bawei.com.d05_test01.View.ShowView;

public class MainActivity extends AppCompatActivity {

    private List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText e_insert = findViewById(R.id.edit_insert);
        Button button = findViewById(R.id.btn_insert);

        list = new ArrayList<>();
        initData();
        ShowView showView = findViewById(R.id.showview);
        final InsertView insertView =findViewById(R.id.insert_view);
        showView.setList(list);
        
    }

    private void initData() {
        list.add("泡椒");
        list.add("大可乐");
        list.add("瓜子");
        list.add("其实我是你爹");
        list.add("鸡爪");
        list.add("乖儿子");
        list.add("海螺");
        list.add("狗屁赌鬼");
        list.add("狗屁鬼");
        list.add("狗屁赌鬼");
        list.add("狗屁鬼");
        list.add("狗屁鬼");
        for (int i = 0; i < 10; i++) {
            list.add("狗屁赌鬼");
            list.add("辣鸡");
            list.add("Lowb");
            list.add("FW+-*");
            list.add("废物+*");
        }
    }

}

Main.xml 的布局
因为 只是 热门搜索 都是死值 所以只可以看 热门搜索的 布局 其他的不用看

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="wrap_content"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:id="@+id/line01"
        android:orientation="horizontal">

        <EditText
            android:layout_gravity="center"
            android:layout_width="290dp"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_shape"
            android:id="@+id/edit_insert"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="搜索"
            android:textSize="21dp"
            android:layout_gravity="center"
            android:background="@drawable/btn_shape"
            android:layout_marginLeft="10dp"
            app:layout_constraintLeft_toRightOf="@id/edit_insert"
            android:id="@+id/btn_insert"/>

    </LinearLayout>

    <LinearLayout
        app:layout_constraintTop_toBottomOf="@id/line01"
        android:layout_width="match_parent"
        android:id="@+id/line02"
        android:orientation="vertical"
        android:layout_height="200dp">

        <TextView
            app:layout_constraintTop_toBottomOf="@id/line01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="搜索历史"/>

        <mlb.bawei.com.d05_test01.View.InsertView
            android:id="@+id/insert_view"
            android:layout_width="match_parent"
            android:layout_height="178dp" />

    </LinearLayout>

    <LinearLayout
        android:layout_marginTop="5dp"
        android:layout_width="match_parent"
        android:layout_height="260dp"
        app:layout_constraintTop_toBottomOf="@id/line02"
        android:orientation="vertical">

        <TextView
            app:layout_constraintTop_toBottomOf="@id/line01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="热门搜索"/>

        <mlb.bawei.com.d05_test01.View.ShowView
            app:layout_constraintTop_toBottomOf="@id/line02"
            android:id="@+id/showview"
            android:layout_width="match_parent"
            android:layout_height="170dp" />

    </LinearLayout>


</android.support.constraint.ConstraintLayout>

自定义View 实现的流式布局
继承LinearLayout 重写两个有参构造
给一个赋值的方法 当给赋值的时候就会 调用添加的一个方法–showData();

package mlb.bawei.com.d05_test01.View;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import mlb.bawei.com.d05_test01.R;

/**
 * @author
 * @date 2018/11/30
 */
public class ShowView extends LinearLayout {

    List<String> list;
    Context  contexts;

    public ShowView(Context context) {
        super(context);
        list = new ArrayList<>();
        contexts=context;
        setOrientation(VERTICAL);
    }

    public ShowView(Context context, AttributeSet attrs) {
        super(context, attrs);
        contexts=context;
        setOrientation(VERTICAL);
    }

    public void setList(List<String> lists) {
        list = lists;
        showData();
    }

    int mMaxSize=22;
    int a =1;
    public void showData() {
        //先清空 因为都是重新画
        removeAllViews();
        //再初始 布局
        LinearLayout linearLayout_h = (LinearLayout) View.inflate(contexts, R.layout.waterpall_h,null);
        //给试图添加进去
        addView(linearLayout_h);
        //
        int len=0;
        //循环
        for (int i=0;i<list.size();i++){
            //判断长度 如果大于了 就 再次添加一下
            if(a>5){
                linearLayout_h = (LinearLayout) View.inflate(contexts, R.layout.waterpall_h,null);
                //给试图添加进去
                addView(linearLayout_h);
                //换行
                a=0;
            }
            View view = View.inflate(contexts,R.layout.waterpall,null);
            //给试图的空间赋值
            TextView textView = view.findViewById(R.id.pall_name);
            textView.setText(list.get(i));
            //把这个view 给 lienear
            linearLayout_h.addView(view);
            a++;
            final int index=i;
            LinearLayout.LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
            //layoutParams.weight=1;
            view.setLayoutParams(layoutParams);
            //监听事件
            view.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(contexts,"你点了 "+list.get(index),Toast.LENGTH_SHORT).show();
                }
            });
            view.setOnLongClickListener(new OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    list.remove(index);
                    a=1;
                    showData();
                    return false;
                }
            });
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41972756/article/details/84651540