Android SearchView
介绍
Android平台上的SearchView是一个用于搜索功能的界面控件,它通常与ListView或RecyclerView等其他列表控件结合使用。SearchView提供了一个文本输入框和一个搜索按钮,用户可以在文本输入框中输入关键字进行搜索,搜索结果会根据输入的关键字进行过滤并显示到列表中。
配置SearchView
要在Android应用中使用SearchView,首先需要在项目的build.gradle文件中添加以下依赖:
implementation 'androidx.appcompat:appcompat:1.3.1'
然后,在布局文件中添加SearchView控件:
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
处理搜索事件
当用户在SearchView中输入关键字并点击搜索按钮时,我们需要处理搜索事件并响应相应的逻辑。首先,在Activity中找到SearchView控件并设置搜索监听器:
SearchView searchView = findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// 处理搜索关键字
handleSearch(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// 在输入关键字时即时响应搜索
handleSearch(newText);
return true;
}
});
然后,我们可以在handleSearch()
方法中处理搜索逻辑,例如过滤列表数据并更新列表显示:
private void handleSearch(String query) {
List<String> filteredList = new ArrayList<>();
for (String item : dataList) {
if (item.contains(query)) {
filteredList.add(item);
}
}
adapter.setData(filteredList);
}
上述代码以一个字符串列表为例,当用户输入的关键字在列表中的某个字符串中出现时,将该字符串添加到过滤列表中,并通过adapter.setData()
方法更新列表显示。这里的adapter
是列表的适配器对象,具体使用方法根据具体使用的列表控件而定。
自定义SearchView
Android的SearchView提供了一些自定义属性,可以根据需求进行样式调整。例如,可以更改搜索图标、文本颜色和背景等。
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="请输入关键字"
android:searchIcon="@drawable/custom_search_icon"
app:searchHintIcon="@drawable/custom_search_hint_icon"
app:queryBackground="@drawable/custom_search_background"
app:queryTextColor="@color/custom_search_text_color" />
上述代码中,iconifiedByDefault
属性设置为false
可以让SearchView一直处于展开状态。queryHint
属性用于设置输入框中的提示文字。searchIcon
和searchHintIcon
属性分别用于设置搜索按钮和搜索提示图标的自定义样式。queryBackground
属性用于设置输入框的背景样式,可以使用自定义的drawable资源。queryTextColor
属性用于设置输入框中文本的颜色。
示例代码
以下是一个简单的示例代码,使用SearchView实现搜索功能,具体为根据关键字过滤并显示相应的手机品牌。
public class MainActivity extends AppCompatActivity {
private List<String> brandList; // 品牌列表
private List<String> filteredList; // 过滤后的品牌列表
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
brandList = new ArrayList<>();
brandList.add("Apple");
brandList.add("Samsung");
brandList.add("Huawei");
brandList.add("Xiaomi");
brandList.add("Oppo");
ListView listView = findViewById(R.id.listView);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, brandList);
listView.setAdapter(adapter);
SearchView searchView = findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
handleSearch(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
handleSearch(newText);
return true;
}
});
}
private void handleSearch(String query) {
filteredList = new ArrayList<>();
for (String brand : brandList) {
if (brand.toLowerCase().contains(query.toLowerCase())) {
filteredList.add(brand);
}
}
adapter.clear();
adapter.addAll(filteredList);
adapter.notifyDataSetChanged();
}
}
运行上述示例代码,界面中会显示一个SearchView和一个ListView,用户在SearchView中输入关键字后,ListView中会实时更新显示过滤后的手机品牌。
总结
Android的SearchView提供了方便的搜索功能,可以很容易地集成到应用中。通过设置搜索监听器并处理搜索事件,我们可以实现根据关键字过滤列表数据的功能。同时,SearchView还提供了一些自定义属性,可以根据具体需求进行样式调整。