Android SearchView

Android SearchView

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属性用于设置输入框中的提示文字。searchIconsearchHintIcon属性分别用于设置搜索按钮和搜索提示图标的自定义样式。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还提供了一些自定义属性,可以根据具体需求进行样式调整。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程