1.先解决流式布局的FrameLayout,以方便拉入布局界面
public class FlowLayout extends FrameLayout {
private final static int H_DISTANCE=20;//水平间距20
private final static int V_DISTANCE=20;//竖直间距20
public FlowLayout(@NonNull Context context) {
super(context);
}
public FlowLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public FlowLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void addTextView(String keys){
//加载字体布局
TextView textView = (TextView) View.inflate(getContext(), R.layout.flow_item, null);
textView.setText(keys);
//布局宽高自适应
LayoutParams params = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
textView.setLayoutParams(params);//控件设置上布局出参数
addView(textView);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
int width=getWidth();//获取本空间宽度,用于计算行数
int row=0;//行数
int disWidth=H_DISTANCE;//子控件左边的左表
for (int i = 0; i < getChildCount(); i++) {
View view=getChildAt(i);
int viewWidth = view.getWidth();
int viewHeight = view.getHeight();
Log.i("dt", "textHeight "+viewHeight);
if (disWidth+viewWidth>width){
row++;
disWidth=H_DISTANCE;//还原左边边距
}
int ViewTop =row*viewHeight+row*V_DISTANCE;
view.layout(disWidth,ViewTop,disWidth+viewWidth,ViewTop+viewHeight);//子控件布局
disWidth+=(viewWidth+H_DISTANCE);//记录下一个子控件的左边坐标
}
}
}
加载的字体布局flow_item放layout文件夹下
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:textSize="20sp"
android:textColor="@color/colorPrimaryDark"
android:background="@drawable/car_btn_bg"/>
自定义的car_btn_bg写drawable文件夹下
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:color="@android:color/holo_red_dark"
android:width="2dp">
</stroke>
![在这里插入图片描述](https://img-blog.csdnimg.cn/201812011046459.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzcxNzQ0Nw==,size_16,color_FFFFFF,t_70)</shape>
2.解决了流式布局,然后添加到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:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edit_keys"
android:layout_weight="1"/>
<Button
android:layout_width="80dp"
android:layout_height="50dp"
android:id="@+id/btn_search"
android:text="搜索"/>
</LinearLayout>
<com.baidu.week1tast1.FlowLayout
android:id="@+id/flow_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</com.baidu.week1tast1.FlowLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="清除历史记录"/>
</LinearLayout>
3.搞定数据库,简单写写就好,该重写的重写
public class RecordSQLiteOpenHelper extends SQLiteOpenHelper {
public RecordSQLiteOpenHelper(@Nullable Context context) {
super(context, "temp.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//打开数据库,建立了一个叫records的表,里面只有一列name来存储历史记录:
db.execSQL("create table records(id integer primary key autoincrement,name varchar(200))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
4最后把Activity补全,数据库的方法写完
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText mEdit;
private Button msearch;
private FlowLayout mFlowLayout;
private RecordSQLiteOpenHelper helper;
private SQLiteDatabase db;
private List<String> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEdit = findViewById(R.id.edit_keys);
msearch = findViewById(R.id.btn_search);
mFlowLayout = findViewById(R.id.flow_layout);
helper=new RecordSQLiteOpenHelper(this);
msearch.setOnClickListener(this);
data = getRecordsList();
for (int i = 0; i < data.size(); i++) {
mFlowLayout.addTextView(data.get(i));
}
}
//点击事件
public void onClick(View v){
if (v.getId()==R.id.btn_search){//搜索点击
String keys=mEdit.getText().toString();
initData(keys);
mFlowLayout.addTextView(keys);
}else {//删除点击
mFlowLayout.removeAllViews();
deleteData();
}
}
//数据库添加
private void initData(String tempName){
db = helper.getWritableDatabase();
db.execSQL("insert into records(name) values('" + tempName + "')");
db.close();
}
//数据库清空
private void deleteData(){
db = helper.getWritableDatabase();
db.execSQL("delete from records");
db.close();
}
public List<String> getRecordsList() {
List<String> recordsList = new ArrayList<>();
db = helper.getReadableDatabase();
Cursor cursor = db.query("records",null,null,null,null,null,null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
recordsList.add(name);
} //关闭数据库
db.close();
return recordsList;
}
}