开源一个好看的安卓 搜索框(searchview)

该博客介绍了作者基于wenwenwen888/SearchDialog项目改进的Android搜索框,适配了androidx并添加了关键词联想功能。提供了效果展示、使用方法及GitHub仓库链接,欢迎star。
摘要由CSDN通过智能技术生成

文章原发布地址https://xiaoyou66.com/archives/2618
本文章为个人博客的备份版本、作者:小游、作者博客:点击访问

事先声明

本项目基于 wenwenwen888/SearchDialog: 仿bilibili搜索框效果(三句代码实现) (github.com)

只是因为这个大佬的项目比较旧,我在他代码的基础上进行改进,适配androidx,同时添加了关键词联想功能。

效果如下

关键词联想功能

如何使用

引入依赖

 implementation 'com.github.xiaoyou-xblog:SearchDialog:v2.2'

实例化

 SearchFragment<T> searchFragment = SearchFragment.newInstance();

回调设置

searchFragment
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用SearchView和RecyclerView来实现Android中的搜索功能,并且在搜索结果中高亮显示匹配的文本。下面是实现的简要步骤: 1. 首先,在你的布局文件中添加SearchView和RecyclerView。 2. 在Activity或Fragment中,找到SearchView并设置搜索监听器。在监听器的onQueryTextChange方法中,获取用户输入的搜索关键字,并更新RecyclerView的数据源。 3. 在RecyclerView的Adapter中,实现一个过滤方法来根据搜索关键字过滤数据源。这个过滤方法可以使用String类的contains方法来判断是否存在匹配的文本。 4. 在过滤方法中,你可以使用SpannableString类来对匹配的文本进行高亮处理。使用ForegroundColorSpan类来设置高亮文本的颜色。 这是一个简单的示例代码,帮助你更好地理解: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> dataList; private List<String> filteredDataList; private String searchText; // Adapter构造函数和其他方法... public void filter(String text) { searchText = text.toLowerCase(); filteredDataList.clear(); if (searchText.isEmpty()) { filteredDataList.addAll(dataList); } else { for (String item : dataList) { if (item.toLowerCase().contains(searchText)) { filteredDataList.add(item); } } } notifyDataSetChanged(); } // ViewHolder和其他方法的实现... @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { String item = filteredDataList.get(position); // 高亮处理 if (!searchText.isEmpty()) { int startPos = item.toLowerCase().indexOf(searchText); int endPos = startPos + searchText.length(); if (startPos != -1) { SpannableString spannableString = new SpannableString(item); ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); spannableString.setSpan(colorSpan, startPos, endPos, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); holder.textView.setText(spannableString); } else { holder.textView.setText(item); } } else { holder.textView.setText(item); } } } ``` 这只是一个简单的示例,你可以根据实际需求进行修改和扩展。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值