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的更多相关文章

  1. Eclipse Android 代码自动提示功能

    Eclipse Android 代码自动提示功能 Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java ...

  2. [转]Android 代码自动提示功能

    源地址http://blog.sina.com.cn/s/blog_7dbac12501019mbh.html 或者http://blog.csdn.net/longvslove/article/de ...

  3. Android 代码自动提示功能

    Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...

  4. Eclipse For Android 代码自动提示功能

    Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclips ...

  5. **IOS自动完成(搜索自动提示)功能实现

    UISearchBar搜索AutoComplete下拉列表搜索提示 http://www.codeios.com/thread-10685-1-1.html 介绍:     在搜索框上加入下拉列表.在 ...

  6. Eclipse Android 代码自动提示功能 +导入 epf

    1.设置 java 文件的代码提示功能 打 开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist ...

  7. Springboot+Vue实现仿百度搜索自动提示框匹配查询功能

    案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...

  8. eclipse自动提示功能没了的解决办法(转载)

    eclipse自动提示功能没了的解决办法 标签: eclipse联想 2012-08-09 14:32 24687人阅读 评论(7) 收藏 举报  分类: Android(38)  版权声明:本文为博 ...

  9. ASP.NET输入文本框自动提示功能

    在ASP.NET Web开发中会经常用到自动提示功能,比如百度搜索.我们只要输入相应的关键字,就可以自动得到相似搜索关键字的提示,方便我们快速的输入关键字进行查询. 那么在ASP.NET中,如果我们需 ...

随机推荐

  1. Hibernate基本原理(一)

    在开始学hibernate之前,一直就有人说:Hibernate并不难,无非是对JDBC进一步封装.一句不难,难道是真的不难还是眼高手低? 如果只是停留在使用的层面上,我相信什么技术都不难,看看别人怎 ...

  2. HTML坦克大战学习01

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  3. [从jQuery看JavaScript]-JavaScript

    什么是JavaScript?相信随便百度Google一下都能找到一大堆的定义解释.而在我的理解中,JavaScript就是一种客户端的脚本语言,用于处理页面数据逻辑和用户体验(网页特效).实际上,Ja ...

  4. 你可能并不需要一个 CTO

    转自:http://dbanotes.net/CTO 有朋友在微信里让我给推荐一个 CTO.说是一家公司在找人,据说「项目不错」,因为之前的业务不是很互联网,现在有一个新的项目要做,要做一个社会化电商 ...

  5. MySQL中乐观锁和悲观锁 原理、区别

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据 ...

  6. android listview 总结

    ScrollView与ListView冲突: public class MyExpandableListView extends ExpandableListView { public MyExpan ...

  7. Unity3D之碰撞体,刚体

    一 概念介绍 刚体 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动.任何游戏对象只有添加了刚体组件才能受到重力的影 ...

  8. UIScrollView 的代理方法简单注解

    //减速停止了时执行,手触摸时执行执行 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;    //只要滚动了就会触发 ...

  9. 【Latex】数学公式排版

    http://www.cnblogs.com/houkai/p/3399646.html 常用latex数学符号表 https://zh.wikipedia.org/wiki/Help:%E6%95% ...

  10. SQL Server--实体再复习

    前些天小编所在的组织部重构.组长交给小编一项设计实体的活儿,它是我们软件灵魂(数据)的载体,实体的抽象影响到数据库设计,数据库设计的质量影响到整个程序的运营,以下是我设计的实体关系图: 系统核心业务逻 ...