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

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties