介绍
SearchView 是 Android 原生的搜索框组件,它在默认的情况下显示着 1 个搜索图标,单击图标后将展开搜索框。当用户在搜索框内输入文字时可以通过监听器监听用户输入,当用户输入完成后也可以通过监听器来执行搜索功能。例如,在手机的文件管理器中搜索指定文件时,就可以使用该组件来实现
基本语法
<SearchView
android:id="@+id/ID号"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</SearchView>
相关方法
- setIconifiedByDefault: 设置搜索图标是否显示在搜索框内。
- setQueryHint:设置搜索框内默认显示的提示文字。
- setSubmitButtonEnabled:启用搜索框内查询内容不为空时显示提交按钮。
- setMaxWidth:设置搜索框组件的最大宽度。
如果想让搜索框实现搜索功能时,还需要为搜索框设置事件监听器。
//获取搜索框组件
SearchView searchView= (SearchView) findViewById(R.id.searchView);
//设置搜索框事件监听器
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
//当用户提交查询时调用该方法
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
//当用户更改查询文本时调用该方法
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
例子
在列表中指定搜索内容
编写布局文件
<?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="vertical">
<!--搜索框-->
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="请输入搜索内容" />
<!--列表视图-->
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
编写SearchViewActivity
设置搜索框事件监听器,首先在 onQueryTextSubmit() 方法中通过 Toast 显示当前搜索的字母,然后在 onQueryTextChange() 方法中实现通过 ListView 列表显示搜索内容。
public class SearchViewActivity extends AppCompatActivity {
//设置列表显示的字母数组
private String[] content={"a","b","c","d","e","f","g","h","i","j"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_view);
SearchView searchView = (SearchView) findViewById(R.id.searchView);
final ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_1, content));
listView.setTextFilterEnabled(true); //启用文本过滤器
//设置搜索框事件监听器
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
//当用户提交查询时调用该方法
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(SearchViewActivity.this, "搜索字母:"+query,
Toast.LENGTH_SHORT).show();
return false;
}
//当用户更改查询文本时调用该方法
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)) { //如果搜索框内容长度不为0时
listView.setFilterText(newText); //列表显示搜索内容
} else {
listView.clearTextFilter(); //否则清除过滤
}
return false;
}
});
}
}
效果