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

相关文章

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详