android 搜索框组件,android 控件 弹框+ 搜索框

dialog+ SearchView + ListView

1.效果:

f3c7b6af4515

image.png

1.一个searchView+ListView 视图:#R(dialog_search.xml)

android:id="@+id/searchView"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:iconifiedByDefault="false"

android:queryHint="请输入搜索内容" />

android:id="@+id/listView"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1" />

2.添加dialog

Dialog dialog = new Dialog(this);

LayoutInflater inflater=getLayoutInflater();

final View view=inflater.inflate(R.layout.dialog_search, null);

dialog.setContentView(view);

dialog.show();

弹框显示结果为:

f3c7b6af4515

image.png

3.为ListView配置数据

通过view 获取SearchView、 ListView

SearchView searchView = (SearchView)view.findViewById(R.id.searchView);

ListView mListView = (ListView)view.findViewById(R.id.listView);

//设置该搜索框默认是否自动缩小为图标

searchView.setIconifiedByDefault(false);

//MainActivity.this :context listDate:数据源

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.select_dialog_item, listDate);

mListView.setAdapter(adapter);

//true表示listview获得当前焦点的时候,与相应用户输入的匹配符进行比对,筛选出匹配的ListView的列表中的项

mListView.setTextFilterEnabled(true);

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()

{

// 当点击搜索按钮时触发该方法

@Override

public boolean onQueryTextSubmit(String query) {

return false;

}

// 当搜索内容改变时触发该方法

@Override

public boolean onQueryTextChange(String newText) {

if (!TextUtils.isEmpty(newText)){

//使用此方法搜索会出现一个黑色框框

//mListView.setFilterText(newText);

//未显示效果采用下面方法 不会出现黑色框

adapter.getFilter().filter(newText);

}else{

//mListView.setFilterText(newText);

adapter.getFilter().filter("");

}

return false;

}

});

}

写到 配上数据就能实现上述效果

f3c7b6af4515

image.png

如果想要为listView 添加点击事件:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

//xxxxxxxxxxxxx

}

});

如果直接通过position获取listDate数据,(由于搜索框的过滤条件 整个position的范围实际上是缩小过了 很难通过listDate获取选中的值)

可以通过适配器获取选中的值

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

String item = (String)adapter.getItem(position);

//xxxxxxxxxxxx 其他操作

dialog.dismiss();

}

});