目录
布局
首先,把标题布局和搜索栏布局放在同一个FrameLayout布局下面,下面两个具体的布局文件就不用放上去了吧。
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/title_back_layout" />
<include layout="@layout/title_search" />
</FrameLayout>
然后当点击搜索图标时,把标题栏布局的visibility属性设为gone,搜索栏布局的visibility属性设置为visible,这样就起到很好的布局切换效果。
Activity实现
private List<Bean> data = new ArrayList<>();
private List<Bean> searchData = new ArrayList<>();
//搜索按钮
iv_search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchTitle.setVisibility(View.VISIBLE);
ll_title.setVisibility(View.GONE);
et_Search.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(et_Search, InputMethodManager.SHOW_FORCED);
lvLetter.setVisibility(View.GONE);
}
});
//取消按钮
iv_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchTitle.setVisibility(View.GONE);
ll_title.setVisibility(View.VISIBLE);
lvLetter.setVisibility(View.VISIBLE);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(et_Search.getWindowToken(), 0); //强制隐藏键盘
et_Search.clearFocus();
adapter.setData(data);
}
});
et_Search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(et_Search.getText().equals("")){
adapter.setData(data);
}else {
searchdata.clear();
for(Bean f : data){
if(f.getName().contains(et_Search.getText().toString().trim())){
searchData.add(f);
}
}
if(searchdata.size()==0){
adapter.setData(data);
}else {
adapter.setData(searchData);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
et_Search.addTextChangedListener点击方法是监听EditText发生文字变化后,进行想对应的处理,把Bean类中的某个字段进行判断,如果包含的话,就把它添加到searchData中,然后通过listView或者RecyclerView进行展示,这个搜索效果整个实现还是比较简单的。