Android搜索自动提示功能 AutocompleteTextView
1.配置main.xml中自动提示控件:
<AutoCompleteTextView
android: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" > <TextView
android:id="@+id/brandName"
android:layout_width="fill_parent"
android:layout_height="wrap_content" /> <TextView
android:id="@+id/searchText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" /> </LinearLayout>
注: android:visibility="gone"这个是加入输入英文字母有中文提示的关键性代码
.定义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()
{
// A
addSomeSearch("AQMM aiqingmaima", "爱情买卖");
addSomeSearch("AWNJBBW aiwonijiubbw", "爱我你就抱抱我");
addSomeSearch("ABZJFFS aibuzaijiuffs", "爱不在就放放手");
// B
addSomeSearch("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()
{
// 添加软键盘事件(让软键盘有一个搜索的图标)
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if (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()
{ @Override
public void onClick(View v)
{
// TODO Auto-generated method stub
if (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()
{ @Override
public 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()
{ @Override
public 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()
{ @Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// TODO Auto-generated method stub
if (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();
}
} @Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
// TODO Auto-generated method stub } @Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
if (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); }
结束语:这样一直改变适配器的方法不知道会不会在性能上产生一定的问题...在真机上测试还是很快速的,程序还有很多要优化的地方,如果有更好的方法的还望指点呀...
Android搜索自动提示功能 AutocompleteTextView的更多相关文章
- Eclipse Android 代码自动提示功能
Eclipse Android 代码自动提示功能 Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java ...
- [转]Android 代码自动提示功能
源地址http://blog.sina.com.cn/s/blog_7dbac12501019mbh.html 或者http://blog.csdn.net/longvslove/article/de ...
- Android 代码自动提示功能
Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...
- Eclipse For Android 代码自动提示功能
Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...
- **IOS自动完成(搜索自动提示)功能实现
UISearchBar搜索AutoComplete下拉列表搜索提示 http://www.codeios.com/thread-10685-1-1.html 介绍: 在搜索框上加入下拉列表.在 ...
- Eclipse Android 代码自动提示功能 +导入 epf
1.设置 java 文件的代码提示功能 打 开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist ...
- Springboot+Vue实现仿百度搜索自动提示框匹配查询功能
案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...
- eclipse自动提示功能没了的解决办法(转载)
eclipse自动提示功能没了的解决办法 标签: eclipse联想 2012-08-09 14:32 24687人阅读 评论(7) 收藏 举报 分类: Android(38) 版权声明:本文为博 ...
- ASP.NET输入文本框自动提示功能
在ASP.NET Web开发中会经常用到自动提示功能,比如百度搜索.我们只要输入相应的关键字,就可以自动得到相似搜索关键字的提示,方便我们快速的输入关键字进行查询. 那么在ASP.NET中,如果我们需 ...
随机推荐
- rails局部模板 render
<%= render partial: 'file' %> file是以_开头命名的文件,比如_cart.html.erb 这样就可以用render来调用了 还可以传参数 比如 rails ...
- Sphinx速成指南
目录 1. Sphinx简介 1.1. 什么是全文检索 1.2. 介绍 1.3. Sphinx的特性 2. Sphinx安装(For MySQL) 2.1. Windows下安装 2.2. Linux ...
- laravel 参数配置
1:在项目根目录下有个叫.env的文件.这个文件是配置配置.由config文件下的app.php 直接读取. #参数解释 APP_ENV=local #访问地址 APP_DEBUG=true #是否开 ...
- variable `xxx' has initializer but incomplete type
错误:variable `xxx' has initializer but incomplete type 原因:xxx对应的类型没有找到,只把xxx声明了但是没给出定义.编译器无从确认你调用的构造函 ...
- MapReduce调度与执行原理系列文章
转自:http://blog.csdn.net/jaytalent?viewmode=contents MapReduce调度与执行原理系列文章 一.MapReduce调度与执行原理之作业提交 二.M ...
- 继电器是如何成为CPU的
阅读目录(Content) 从电池.开关和继电器开始 用继电器做个与门 用继电器做个或门 用继电器做个异或门 做一些看起来可用的东西 小小约定 振荡器 加法器 寄存器 R-S触发器 D触发器 上升沿D ...
- ffplay(2.0.1)中的音视频同步
最近在看ffmpeg相关的一些东西,以及一些播放器相关资料和代码. 然后对于ffmpeg-2.0.1版本下的ffplay进行了大概的代码阅读,其中这里把里面的音视频同步,按个人的理解,暂时在这里作个笔 ...
- Unity中坐标系转换方法
前言 本篇文章主要是参考<Unity API 解析>---陈泉宏. 这是本人在学校图书馆找到一本书,主要介绍的就是常用的类,比较实用,没有冗余的地方.在此推荐一下这本书! 一.Screen ...
- 【Java面试题】43 说出一些常用的类,包,接口,请各举5个
要让人家感觉你对java ee开发很熟,所以,不能仅仅只列core java中的那些东西,要多列你在做ssh项目中涉及的那些东西.就写你最近写的那些程序中涉及的那些类. 常用的类:BufferedRe ...
- sql 一些题目
这道SQL笔试题你会怎么写(转) 最近面试了一些Senior BI的候选人,行业经验三年到七年不等,起初觉得这个Level的无需准备笔试题,碍于领导执念,就在真实项目中提取5道SQL题目,这里仅单说其 ...