SearchView是安卓自带的搜索控件,可以帮助我们省下很多功夫。SearchView提供的api很多,但是麻烦在于SearchView的默认样式很多情况下不满足我们的开发需求,需要我们进行去进行定制。

对于SearchView的定制,查了网上一些资料,自己整理了一下,主要是xml和代码实现两种方式。我使用的是代码实现的方式。通过查找到SearchView控件里的各个子控件的view的Id,再分别属性修改。下面贴一下我的代码,里面的drawable和mipmap等可以替换为自己的资源。//设置searchview样式

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)

private voidsetSearchView(finalSearchView searchView) {

if(searchView !=null) {

//获取最前面的搜索图标ImageView的id

int imgId = searchView.getContext().getResources().getIdentifier("android:id/search_mag_icon", null, null);

//获取ImageView

ImageView searchButton = (ImageView) searchView.findViewById(imgId);

//设置图片

searchButton.setImageResource(R.mipmap.search_icon);

//不使用默认

searchView.setIconifiedByDefault(false);

searchView.setQueryHint("搜索商品");

//设置嵌套有searchicon和searchtext的ll的id

intsearch_edit_ll_id = searchView.getContext().getResources().getIdentifier("android:id/search_edit_frame", null, null);

LinearLayout search_edit_ll = (LinearLayout) searchView.findViewById(search_edit_ll_id);

LinearLayout.LayoutParams lp =newLinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);

lp.weight=1;

lp.setMargins(0,0,0,0);

search_edit_ll.setLayoutParams(lp);

//获取嵌套searchtext的ll的id

intsearch_plate_ll_id = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);

LinearLayout search_plate_ll = (LinearLayout) searchView.findViewById(search_plate_ll_id);

search_plate_ll.setBackground(getResources().getDrawable(R.drawable.search_view_ll_bg));

//获取到TextView的ID

intid = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);

//获取到TextView的控件

TextView textView = (TextView) searchView.findViewById(id);

textView.setPadding(0,20,0,0);

//设置字体大小为14sp

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

//设置字体颜色

textView.setTextColor(getResources().getColor(R.color.white));

//设置提示文字颜色

textView.setHintTextColor(getResources().getColor(R.color.gray));

//获取到close的控件id...search_close_btn

intclodeid = searchView.getContext().getResources().getIdentifier("android:id/search_close_btn", null, null);

ImageView imageView = (ImageView) searchView.findViewById(clodeid);

imageView.setImageResource(R.mipmap.xrzx_gb);

}

}

一般使用到搜索框时,都需要搜索框下面有一个即时显示搜索信息的列表来展示数据库查询到的数据或者网络请求获取的数据。这个对于SearchView来说也不是事情,在SearchView可以通过searchview.setOnQueryTextChangeListener()来监听searchview里的输入内容变化来进行操作。这个方法需要重写两个方法,onQueryTextSubmit()单击搜索按钮时激发该方法,说到这个方法,一般在searchview的布局文件里添加属性,android:imeOptions="actionSearch" 设置输入法里的按钮变为搜索样式,onQueryTextChange()用户输入字符时激发该方法。

第一个方法我们就不用说了,一般都是点击跳转到搜索结果界面。

第二个方法是重点,在这个方法我们可以实时获取用户输入的内容,从而进行操作。下面贴出我的搜索代码。

privateString input="";

/**

*用户输入字符时激发该方法

*/

@Override

public booleanonQueryTextChange(String newText) {

if(newText !=null&& newText.length() >0) {

input= newText;

//执行相应的查询动作

try{

//这里我使用的开启线程,延迟500毫秒执行,在里面判断一次输入的字符和搜索的字符是否一致,不一致就返回,避免重复搜索。

schedule(newSearchTipThread(newText),500);

}catch(Exception e) {

Log.i("TAG",e.toString());

}

}else{

//用户情况输入内容后清除下面显示控件的数据

search_content_recyclerView.setAdapter(null);

}

return true;

}

//线程池最大容量为10

private ScheduledExecutorService scheduledExecutor= Executors.newScheduledThreadPool(10);

//延迟搜索

publicScheduledFutureschedule(Runnable command, longdelayTimeMills) {

returnscheduledExecutor.schedule(command,delayTimeMills,TimeUnit.MILLISECONDS);

}

@Override

public booleanonOptionsItemSelected(MenuItem item) {

switch(item.getItemId()) {

caseandroid.R.id.home: {

onBackPressed();

return true;

}

}

return false;

}

class SearchTipThread implements Runnable {

private String newText;

public SearchTipThread(String newText) {

this.newText= newText;

}

public voidrun() {

// keep only one thread to load current search tip, u can get data from network here

if(newText!=null&&newText.equals(input)) {

//网络请求数据或者查询数据库,并显示在adapter上。

doSearch();

}

}

}

到这里基本就结束了,后续就是把搜索的内容储存到数据库。这个在网上也有很多,也很简单,基本就是执行搜索操作时进行储存,网络上也很多资料,就不赘述了!

android 多条件搜索界面,SearchView实现搜索功能相关推荐

  1. android 仿微信聊天界面 以及语音录制功能,Android仿微信录制语音功能

    本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始.停止.创建文件名功能) 第一部分 由于6 ...

  2. Android Studio仿QQ界面实现简单的功能

    文章目录 1. 登录界面 2. 记住密码功能 3. Fragment界面跳转 3.1 Fragement的界面编写 4. 聊天界面 写在前面 由于本人初学阶段,写这篇博客是总结所学的知识点,为后面的进 ...

  3. android 微信缩小通话界面_Android 悬浮窗功能实现(微信语音通话悬浮窗效果实现)...

    1.基本介绍 Android 界面绘制都是通过 WindowManager 对象可通过获取 WINDOW_SERVICE 系统服务得到,并因为 WindowManager 继承于 ViewManage ...

  4. android 登录保存密码,android 如何实现登陆界面的记住密码功能

    今天 写了一个有关登录记住密码的列子 其实这个例子的关键使用到了AutoCompleteTextView 以及sharedPreference的两个关键知识点,大家知道 AutoCompleteTex ...

  5. 搜索介绍 | 当你搜索时,发生了什么?

    全文目录如下: 一如"万物皆可百度"."万物无难事,只要肯百度"所言,搜索在我们生活中早已成为习以为常的事情.毕业季的我们会在每日99+的群聊信息中搜索所需的信 ...

  6. Android中导航栏之搜索框SearchView

    Toolbar系列文章导航 Android中导航栏之Toolbar的使用 Android中导航栏之溢出菜单OverflowMenu Android中导航栏之搜索框SearchView Android中 ...

  7. android 仿 ios 搜索界面跳转效果

    最新写项目的时候,看到搜索界面的跳转基本都是点击搜索然后跳转到下个页面,android 微信上则是 类似toolbar的效果,而ios 上则是一个搜索框上移然后显示新界面的一个效果.仔细研究了下发现和 ...

  8. Android搜索关键字飞入飞出效果(播放器的搜索界面)

    好多应用在搜索界面都有关键字飞入飞出的效果.我自己也实现了下.先上效果图: 实现该效果需要解决以下五点: 1.布局的选用. 2.确定动画区域,即布局的宽高. 3.对关键字坐标的随机分配. 4.对随机分 ...

  9. Android:MTK的Dialer模块联系人搜索

    MTK的Dialer模块联系人搜索 拨号搜索机制分为两个部分:引导搜索和搜索.其中引导搜索是指,从用户输入到开始搜索之间的流程,而搜索部分是指,从数据库搜索字符串的过程. 一.引导搜索部分 默认的拨号 ...

最新文章

  1. 紧急提醒!售价3980,成本价80,你被坑过吗?
  2. php强制下载压缩包损坏,php 通过header下载中文文件名 压缩包损坏或文件不存在的问题...
  3. 送你6份最新开源代码!含NLP、ML、计算机视觉方向(附代码论文)
  4. codeforce A. Design Tutorial: Learn from Math
  5. rn项目 假如cocoapods_在项目中集成 RN
  6. 【转载】SAP物料账未分摊差异分析
  7. python format格式化函数用法
  8. Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结
  9. 基于php的地铁查询系统,省时方便的小程序:查地铁
  10. Nancy 学习-视图引擎 继续跨平台
  11. 内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的
  12. mysql 关键词相关度排序方法详细示例分析
  13. 010 Editor for Mac(十六进制编辑器)v12.0
  14. LCT动态树【史上最精简易懂的LCT讲解】
  15. c语言错误码2,平方根2.我做过C语言的一些错误
  16. 清华大学计算机与科学系张荷花简历,清华大学软件学院
  17. 让你终身受用的世界顶级思维
  18. speedoffice表格的外框线怎么设置?
  19. transform: translateY(-100%)偏移实现上滑隐藏导航栏
  20. 计算机sci 四区,sci四区什么水平

热门文章

  1. python3.4 pickle 序列化大于4GB文件
  2. 博尔特,菲尔普斯和埃蒙斯
  3. 【ITIL框架】什么是 ITIL? 您的 IT 基础架构库指南
  4. 苏宁易购2017年净利润暴涨五倍,资本价值被低估
  5. BosonNLP试用
  6. C/C++编程笔记:最强IDE和它的天才第一步!带你稳步学编程
  7. MLK | Keras 核心网络层的解读指南
  8. 在SQR中使用Break逻辑
  9. Oracle ASSM
  10. docker : Error response from daemon: Conflict. The container name *** is already in use