Android : 数据库添加+删除+流式布局

在这里插入图片描述
helper类

package com.bwie.administrator.weekone.sqlhelper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;

public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context) {
        super(context, "mydb", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table flow(id Integer primary key autoincrement , name text)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

dao层

package com.bwie.administrator.weekone.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;

import com.bwie.administrator.weekone.sqlhelper.MyHelper;

import java.util.ArrayList;

public class MyDao {

    private MyHelper helper;
    private SQLiteDatabase database;
    private Context mcontext;

    public MyDao(Context context) {
        mcontext = context;
        helper = new MyHelper(context);
        database = helper.getWritableDatabase();
    }

    //查询的方法
    public ArrayList<String> show() {
        ArrayList<String> datas = new ArrayList<>();
        Cursor cursor = database.query("flow", null, null, null, null, null, null, null);
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            datas.add(name);
        }
        return datas;
    }

    //添加数据的方法
    public void insertall(String name) {
        ContentValues values = new ContentValues();
        values.put("name", name);
        database.insert("flow", null, values);
        Toast.makeText(mcontext, "添加成功", Toast.LENGTH_SHORT).show();
    }

    //删除数据的方法
    public void delete() {
        database.execSQL("delete from flow");
    }
}

自定义控件 ---------头部布局

package com.bwie.administrator.weekone.myview;

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

import com.bwie.administrator.weekone.R;

public class MyXHView extends LinearLayout {

    private EditText My_Search;
    private TextView My_Add;

    public MyXHView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //引入头部布局
        LayoutInflater.from(context).inflate(R.layout.my_hander, this);
        //查找控件
        My_Search = findViewById(R.id.My_Search);
        My_Add = findViewById(R.id.My_Add);
    }

    //获取输入框中的值
    public String getSearch() {
        return My_Search.getText().toString().trim();
    }

    //按钮点击后返回的值
    public TextView getAdd() {
        return My_Add;
    }

    //对editText进行操作
    public EditText getEdit() {
        return My_Search;
    }
}

头部布局的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="match_parent"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/My_Search"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="6"
        android:drawableLeft="@drawable/tb"
        android:background="@drawable/myedit"
        android:drawablePadding="5dp"
        android:hint="搜索" />

    <TextView
        android:id="@+id/My_Add"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="添加" />
</LinearLayout>

自定义view流式布局

package com.bwie.administrator.weekone.myview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.bwie.administrator.weekone.R;

import java.util.ArrayList;

public class MyView extends LinearLayout {
    private int mwidthPixels;
    private String mcolor;

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //获取屏幕的尺寸与密度
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        //像素宽度
        mwidthPixels = metrics.widthPixels;
        //设置这个布局垂直显示(此处注意需要继承的是线性布局,如果不是出不来)
        setOrientation(VERTICAL);
        //获得样式属性
        TypedArray myarray = context.obtainStyledAttributes(attrs, R.styleable.GroupDemo);
        //进行判断
        if (myarray != null) {
            //如果不为空就获得样式
            mcolor = (String) myarray.getText(R.styleable.GroupDemo_textColor);
            //将资源回收
            myarray.recycle();
        }
    }

    //删除的方法
    public void removeChildView() {
        //删除所有的子控件
        removeAllViews();
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);

    }

    //添加数据
    public void setData(ArrayList<String> datas) {
        //创建一个线性布局对象
        LinearLayout linearLayout = getLinear();
        //进行for循环
        for (int i = 0; i < datas.size(); i++) {
            //获取文字
            final String tmp = datas.get(i);
            //初始化宽度
            int numWidth = 0;
            //得到每一行的linearlayout到底有多少个子控件,需要计算总宽度
            int childCount = linearLayout.getChildCount();
            //进行for循环,计算一行的宽度
            for (int j = 0; j < childCount; j++) {
                //通过循环的到每一个子控件
                TextView tv_chang = (TextView) linearLayout.getChildAt(j);
                //layoutParams布局参数    获取布局参数
                LayoutParams layoutParams = (LayoutParams) tv_chang.getLayoutParams();
                //设定每一个控件的外边距
                int aleftMargin = layoutParams.leftMargin;
                //测量这个textview的宽度
                tv_chang.measure(getMeasuredWidth(), getMeasuredHeight());
                //将得到的宽度相加  字体本身的宽度+左外边距+左边的填充+右边的填充
                numWidth += tv_chang.getMeasuredWidth() + aleftMargin + tv_chang.getPaddingLeft() + tv_chang.getPaddingRight();
            }
            //获得text对象
            TextView text = getText();
            //设置一个点击事件,再点击条目的时候进行吐司展示
            text.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(getContext(), tmp, Toast.LENGTH_SHORT).show();
                }
            });
            //设置属性
            LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            //给params设置具体的数值;
            params.leftMargin = 15;
            params.topMargin = 10;
            //设定文字的属性
            text.setLayoutParams(params);
            //将文字进行传入
            text.setText(tmp);
            //测量输入的值的高与宽
            text.measure(getMeasuredWidth(), getMeasuredHeight());
            //得到输入值总宽度
            int textNumWidth = text.getMeasuredWidth() + text.getPaddingLeft() + text.getPaddingRight();
            //设定 一个判断条件,如果某个字符串特别长超出了屏幕的总宽度
            if (textNumWidth > mwidthPixels) {
                //如果文字过长就进行一个截取字符串
                String s = tmp.substring(0, 6);
                text.setText(s + "...");
                text.measure(getMeasuredWidth(), getMeasuredHeight());//截取完毕后再重新测量宽高
                textNumWidth = text.getMeasuredWidth();//得到宽度
            }
            //进行判断
            if (mwidthPixels >= numWidth + textNumWidth) {
                linearLayout.addView(text);//添加新的控件
            } else {
                //此处给LinearLayout重新赋值,通过getLinear换行
                linearLayout = getLinear();
                linearLayout.addView(text);
            }
        }
    }

    //初始化子线性布局视图
    private LinearLayout getLinear() {
        //创建一个控件对象
        LinearLayout linearLayout = new LinearLayout(getContext());
        //使用LayoutParams  用来控制组件的大小
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        linearLayout.setLayoutParams(params);//将属性值添加到控件
        //this本类对象
        this.addView(linearLayout);//此处只要重新添加视图了就自动换行
        return linearLayout;//返回控件
    }

    //初始化文字
    private TextView getText() {
        //创建一个textview对象
        TextView textView = new TextView(getContext());
        //设定字体大小
        textView.setTextSize(20);
        //设定字体颜色
        textView.setTextColor(Color.parseColor(mcolor));
        //设定背景颜色
        textView.setBackgroundResource(R.drawable.text_view);
        //设定每个搜索的间隔
        textView.setPadding(10, 3, 10, 3);
        //返回文字
        return textView;
    }
}

实现圆角搜索框用的shape

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="1dp"
        android:color="#f4e00b" />
    <corners android:radius="15dp" />
    <gradient
        android:endColor="#aaa"
        android:startColor="#aaa" />

</shape>

流式布局字体用的代码

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <stroke
        android:width="1dp"
        android:color="#F5F6F9" />
    <corners android:radius="15dp" />
</shape>

attrs里面的代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="GroupDemo">
        <attr name="textColor" format="string" />
    </declare-styleable>
</resources>

Activity的xml里面的代码

<?xml version="1.0" encoding="utf-8"?>
<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:background="#55d7d1"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <!--自定义标题栏-->
    <com.bwie.administrator.weekone.myview.MyXHView
        android:id="@+id/My_Header"
        android:layout_width="match_parent"
        android:layout_height="80dp"></com.bwie.administrator.weekone.myview.MyXHView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="搜索历史" />

        <TextView
            android:id="@+id/My_del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:drawableLeft="@drawable/sc"/>
    </RelativeLayout>

    <com.bwie.administrator.weekone.myview.MyView
        android:id="@+id/My_History"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:textColor="@color/colorPrimaryDark"></com.bwie.administrator.weekone.myview.MyView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="热门搜索" />

    <com.bwie.administrator.weekone.myview.MyView
        android:id="@+id/My_Hot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:textColor="@color/colorPrimaryDark"></com.bwie.administrator.weekone.myview.MyView>
</LinearLayout>

activity的代码

package com.bwie.administrator.weekone;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.bwie.administrator.weekone.dao.MyDao;
import com.bwie.administrator.weekone.myview.MyView;
import com.bwie.administrator.weekone.myview.MyXHView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private String[] data = {"性感", "美女", "丰满", "御姐", "萝莉", "艾滋病", "梅毒", "性感", "美女", "丰满", "御姐", "萝莉", "艾滋病", "梅毒", "性感", "美女", "丰满", "御姐", "萝莉", "艾滋病", "梅毒"};
    private MyXHView My_Header;
    private MyView My_History;
    private MyView My_Hot;
    private MyDao myDao;
    private ArrayList<String> datas = new ArrayList<>();
    private ArrayList<String> mhistoryjihe = new ArrayList<>();
    private TextView My_del;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myDao = new MyDao(this);
        mhistoryjihe = myDao.show();
        //初始化数据
        initData();
        initView();
        //进行一个判断
        if (!mhistoryjihe.isEmpty()) {
            //将默认数据直接从数据库添加到集合中
            My_History.setData(mhistoryjihe);
        }
    }

    //初始化数据
    private void initData() {
        for (int i = 0; i < data.length; i++) {
            datas.add(data[i]);
        }
    }

    //初始化控件
    private void initView() {
        My_Header = (MyXHView) findViewById(R.id.My_Header);
        My_Header.getAdd().setOnClickListener(this);
        My_History = (MyView) findViewById(R.id.My_History);
        My_Hot = (MyView) findViewById(R.id.My_Hot);
        My_Hot.setData(datas);
        My_del = (TextView) findViewById(R.id.My_del);
        My_del.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.My_Add:
                String name = My_Header.getSearch().trim();
                //进行一个费控判断
                if (name != null && name.equals("")) {
                    Toast.makeText(this, "输入为空", Toast.LENGTH_SHORT).show();
                } else {
                    myDao.insertall(My_Header.getSearch().trim());
                    //自己封装一个删除子控件
                    My_History.removeChildView();
                    //将数据添加到集合中
                    mhistoryjihe.add(name);
                    My_History.setData(mhistoryjihe);
                    //添加完毕后进行一个输入框赋空
                    My_Header.getEdit().setText("");
                }
                break;
            case R.id.My_del:
                //删除数据库
                myDao.delete();
                //删除输入历史
                My_History.removeChildView();
                //对数据集合进行清空
                mhistoryjihe.clear();
                break;
        }
    }
}

以上,如果有什么不对的地方,请私信;

猜你喜欢

转载自blog.csdn.net/weixin_43603192/article/details/84671137