1. 标题栏必须使用组合式自定义view实现;
2. 自定义标题栏必须自定义输入文字的颜色属性,xml中可以配置字体颜色;
3. 自定义流式布局,展示搜索记录实现如图一所示效果;
4. 必须使用数据库存储搜索历史记录;
5. 点击清除历史记录,删除数据库中的记录
代码:
清单文件:
<application android:name=".App"
依赖:
compile 'org.greenrobot:greendao:3.2.2' compile 'com.fynn.fluidlayout:fluidlayout:1.0' compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' greendao { schemaVersion 1 daoPackage 'com.example.slxview.db' targetGenDir 'src/main/java' }
//布局:
main:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <com.example.slxview.TitleItem android:id="@+id/main_title" android:layout_width="match_parent" android:layout_height="50dp"> </com.example.slxview.TitleItem> <com.fynn.fluidlayout.FluidLayout android:id="@+id/fluid_layout" android:layout_width="match_parent" android:layout_height="wrap_content" > </com.fynn.fluidlayout.FluidLayout> <Button android:text="清空历史搜索" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/but_clear"/> </LinearLayout>
titleitem
<?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="50dp" android:orientation="horizontal"> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" /> <EditText android:id="@+id/title_ed" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="7" /> <Button android:id="@+id/title_but" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="查询" /> </LinearLayout>
bean:
@Entity public class HistoricalBean { @Id private Long id; @Unique private String name;
app:
public class App extends Application { private DaoSession daoSession; private static App instance; @Override public void onCreate() { super.onCreate(); instance = this; initDao(); } public static App getInstance() { return instance; } private void initDao() { //创建数据库 SQLiteDatabase db = new DaoMaster.DevOpenHelper(this, "data.db").getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } public DaoSession getDao() { return daoSession; } }
自定义头部类:
public class TitleItem extends LinearLayout{ //2.定义接口对象 private OnTitleClickListener listener; private EditText titleEd; private Button titleBut; public TitleItem(Context context) { this(context,null); } public TitleItem(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public TitleItem(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //初始化控件上的方法 initView(context); } /** * 初始化控件上的方法 * @param context */ private void initView(Context context) { View view = View.inflate(context, R.layout.title_item, this); titleEd=view.findViewById(R.id.title_ed); titleBut=view.findViewById(R.id.title_but); titleBut.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String s = titleEd.getText().toString(); //5.添加一个触发事件 listener.onClick(s); } }); } //1.定义一个接口 public interface OnTitleClickListener{ void onClick(String s); } //3为接口对象赋值的方法 void setOnTitleClickListener(OnTitleClickListener listener){ this.listener=listener; } }
mainactivity:
package com.example.slxview; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import com.example.slxview.db.HistoricalBeanDao; import com.fynn.fluidlayout.FluidLayout; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @BindView(R.id.main_title) TitleItem mainTitle; @BindView(R.id.fluid_layout) FluidLayout fluidLayout; @BindView(R.id.but_clear) Button butClear; private List<HistoricalBean> list; private HistoricalBeanDao historicalBeanDao; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); list = new ArrayList<>(); //创建数据库 historicalBeanDao = App.getInstance().getDao().getHistoricalBeanDao(); //得到自定义控件上的值 mainTitle.setOnTitleClickListener(new TitleItem.OnTitleClickListener() { @Override public void onClick(String s) { //当前页面中的控件清空 fluidLayout.removeAllViews(); //创建自定义的HistoricalBean HistoricalBean historicalBean = new HistoricalBean(); //把从自定义控件上得到的s值放到bean对象中 historicalBean.setName(s); //把对象存到数据库中,不添加重复的字段名 MainActivity.this.historicalBeanDao.insertOrReplace(historicalBean); //清空list中的数据 list.clear(); //添加完数据后,再次查询数据库,把刚才添加的搜索内容,展示出来 list.addAll(MainActivity.this.historicalBeanDao.loadAll()); genTag(); } }); //查询数据库 list.addAll(this.historicalBeanDao.loadAll()); genTag(); } private void genTag() { for (int x = 0; x < list.size(); x++) { tv = new TextView(MainActivity.this); tv.setText(list.get(x).getName()); tv.setTextSize(16); FluidLayout.LayoutParams params = new FluidLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(12, 12, 12, 12); fluidLayout.addView(tv, params); } } @OnClick(R.id.but_clear) public void onViewClicked() { fluidLayout.removeAllViews(); historicalBeanDao.deleteAll(); } }