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. WPF教程三:布局之WrapPanel面板

    WrapPanel:环绕面板 WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行. Orientatio ...

  2. select文本框架(change事件)改变另外一个select的值

    $('select[name=adults]').bind('change', function() { var $value = $(this).val(); if ($value >= 1) ...

  3. 关于Unity中使用刚体制作简单跑酷案例

    一.步骤 1.创建一个Canvas 2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率960X640 3.创建一个Image的UI节点作为Canvas的子 ...

  4. 【转】Hibernate系列学习之(二) 多对一、一对一、一对多、多对多的配置方法

    hihernate一对多关联映射(单向Classes----->Student) 一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向 ...

  5. C#NetRemoting双向通信

    闲来无事想玩玩双向通信,实现类似QQ的互发消息的功能.于是乎开始学习.Net Remoting. .Net Remoting 是由客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为 ...

  6. Windows App开发之集成设置、帮助、搜索和共享

    应用设置和应用帮助 "设置"合约 上一节中我们学习了怎样将应用设置保存到本地.这样的方式是通过在App内加入设置选项,这里另一种方式. 微软将其称为"设置"合约 ...

  7. 【Java面试题】33 HashMap和Hashtable的区别

    1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值.HashMap允许null key和n ...

  8. ThinkPHP的易忽视点小结

    1.使用对象的方法插入数据 D用法. $Form = D('Form'); $data['title'] = 'ThinkPHP'; $data['content'] = '表单内容'; $Form- ...

  9. Ubuntu 安装 Kubernetes

    Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-Pa ...

  10. 原生js获取元素样式

    摘要: 我们在开发过程中经常会遇到通过js获取或者改变DOM元素的样式,方法有很多,比如:通过更改DOM元素的class.现在我们讨论原生js来获取DOM元素的CSS样式,注意是获取不是设置 在开始之 ...