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

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按