Android搜索自动提示功能 AutocompleteTextView

2024-01-26 06:50

本文主要是介绍Android搜索自动提示功能 AutocompleteTextView,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android搜索自动提示功能

Android搜索自动提示功能

 

 

1.配置main.xml中自动提示控件:

<AutoCompleteTextViewandroid:id="@+id/autotv_searchresult"android:layout_width="280dip"android:layout_height="35dip"android:layout_centerInParent="true"android:background="#00000000"android:completionThreshold="1"android:imeOptions="actionSearch"android:dropDownHeight="wrap_content"android:dropDownVerticalOffset="10dip"android:hint="搜索歌曲,歌手,音乐盒名..."android:singleLine="true" />

 

 

注:android:dropDownVerticalOffset="10dip"是可以将提示的信息与边框开一段距离的属性,通常都会用的到

 

2.建立搜索栏的布局.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/brandName"android:layout_width="fill_parent"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/searchText"android:layout_width="fill_parent"android:layout_height="wrap_content"android:visibility="gone" /></LinearLayout>

 

 

注: android:visibility="gone"这个是加入输入英文字母有中文提示的关键性代码

 

 

3.定义2个数组并在程序的开始给数组赋值:

// 所有搜索的信息public static ArrayList<HashMap<String, String>> list_searchAll = new ArrayList<HashMap<String, String>>();// 一些搜索的信息public static ArrayList<HashMap<String, String>> list_searchSome = new ArrayList<HashMap<String, String>>();private void addAllSearch(String input, String output){HashMap<String, String> item;item = new HashMap<String, String>();item.put("brandSearchText", input);item.put("brandName", output);list_searchAll.add(item);}private void addAllSearchItems(){addAllSearch("XBH xuebuhui xbh", "学不会");addAllSearch("YXJ yixiangji yxj", "异想记");addAllSearch("XWZ xiaowangzi wangzi", "小王子的漂流瓶");addAllSearch("XYGZJ xiayige xygzj", "下一个自己");addAllSearch("NYFZ nuoyafanzhou nyfz", "诺亚方舟");addAllSearch("XT xintiao xt", "心跳");addAllSearch("QS qinshang qs", "琴伤");addAllSearch("AQSFYR aiqinshifou aqsf", "爱情是否依然");addAllSearch("NZFRSM nizaifanrao nzfrsm", "你在烦扰什么");addAllSearch("WMHGHD womenghuigenghaode wmhgh", "我们会更好的");}private void addSomeSearch(String input, String output){HashMap<String, String> item;item = new HashMap<String, String>();item.put("brandSearchText", input);item.put("brandName", output);list_searchSome.add(item);}private void addSomeSearchItems(){// AaddSomeSearch("AQMM aiqingmaima", "爱情买卖");addSomeSearch("AWNJBBW aiwonijiubbw", "爱我你就抱抱我");addSomeSearch("ABZJFFS aibuzaijiuffs", "爱不在就放放手");// BaddSomeSearch("BCYS banchengyansha", "半城烟沙");addSomeSearch("BFSDLA bufengshoudelianai", "不分手的恋爱");addSomeSearch("BYGSMM buyaogaoshumama", "不要告诉妈妈");}

 

 

 

4.得到控件id,创建SimpleAdapter适配器:

private AutoCompleteTextView autotv_search;
private SimpleAdapter mAdapter;autotv_search = (AutoCompleteTextView) findViewById(R.id.autotv_search);

 

注:适配器的实例化可以在监听中

 

5.设置AutoCompleteTextView的监听

private void autoSearchListen(){autotv_search.setOnKeyListener(new View.OnKeyListener(){// 添加软键盘事件(让软键盘有一个搜索的图标)
   @Overridepublic boolean onKey(View v, int keyCode, KeyEvent event){// TODO Auto-generated method stubif (keyCode == KeyEvent.KEYCODE_ENTER){if (event.getAction() == KeyEvent.ACTION_UP){InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm.isActive()){imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);}return true;}}return false;}});注:if (keyCode == KeyEvent.KEYCODE_ENTER){if (event.getAction() == KeyEvent.ACTION_UP){是当回车键起来的时候才触发不然会被调用2次,一次按下一次弹起autotv_search.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubif (autotv_search.getText().toString().equals("")){mAdapter = new SimpleAdapter(SearchActivity.this,HomeActivity.list_searchAll, R.layout.searchlist, new String[] {"brandSearchText", "brandName" },new int[] { R.id.tv_searchText, R.id.tv_brandName });autotv_search.setAdapter(mAdapter);autotv_search.showDropDown();}}});注:点击搜索框触发,记得参数都要一一对应,你懂的...autotv_search.showDropDown();手动弹出提示autotv_search.setOnFocusChangeListener(new OnFocusChangeListener(){@Overridepublic void onFocusChange(View v, boolean hasFocus){if (hasFocus & autotv_search.getText().toString().equals("")){mAdapter = new SimpleAdapter(SearchActivity.this,HomeActivity.list_searchAll, R.layout.searchlist, new String[] {"brandSearchText", "brandName" },new int[] { R.id.tv_searchText, R.id.tv_brandName });autotv_search.setAdapter(mAdapter);autotv_search.showDropDown();}}});// 点击条目的监听autotv_search.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id){TextView tv =  (TextView) view.findViewById(R.id.tv_brandName);autotv_search.setText(tv.getText().toString());autotv_search.setSelection(autotv_search.getText().toString().length());}});//TextWatcher 是本应用的关键地方...这里感谢云童鞋给的提示,当字符产生变换的时候就调用
TextWatcher tw = new TextWatcher(){@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count){// TODO Auto-generated method stubif (autotv_search.getText().toString().equals("")){mAdapter = new SimpleAdapter(SearchActivity.this,HomeActivity.list_searchAll, R.layout.searchlist, new String[] {"brandSearchText", "brandName" },new int[] { R.id.tv_searchText, R.id.tv_brandName });autotv_search.setAdapter(mAdapter);autotv_search.showDropDown();} else if (autotv_search.getText().toString().length() < 3){mAdapter = new SimpleAdapter(SearchActivity.this,HomeActivity.list_searchSome, R.layout.searchlist, new String[] {"brandSearchText", "brandName" },new int[] { R.id.tv_searchText, R.id.tv_brandName });autotv_search.setAdapter(mAdapter);// mAdapter.notifyDataSetChanged();
    }}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after){// TODO Auto-generated method stub
    }@Overridepublic void afterTextChanged(Editable s){// TODO Auto-generated method stubif (autotv_search.getText().toString().equals("")){mAdapter = new SimpleAdapter(SearchActivity.this,HomeActivity.list_searchAll, R.layout.searchlist, new String[] {"brandSearchText", "brandName" },new int[] { R.id.tv_searchText, R.id.tv_brandName });autotv_search.setAdapter(mAdapter);autotv_search.showDropDown();}}};// 添加文字改变的监听
  autotv_search.addTextChangedListener(tw);}

 

结束语:这样一直改变适配器的方法不知道会不会在性能上产生一定的问题...在真机上测试还是很快速的,程序还有很多要优化的地方,如果有更好的方法的还望指点呀...

转载于:https://www.cnblogs.com/niray/p/3877498.html

这篇关于Android搜索自动提示功能 AutocompleteTextView的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/645967

相关文章

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,