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. qt 窗口控件自动调整大小

    /******************************************************************** * qt 窗口控件自动调整大小 * * 在写gui的时候,希 ...

  2. SyntaxError: inconsistent dedent

    错误原因: 一般是拷贝别人的代码过来编辑,由于编辑器不同,出现 tab和 space 的差别. 解决方法: Window->Preferences->PyDev->Editor-&g ...

  3. e557. 在Applet中显示图片

    See also e551 精简的Applet. Image image; public void init() { // Load image image = getImage(getDocumen ...

  4. C# winform 获取当前路径

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory// 获取模块的完整路径.System.Diagnostics.Process.Get ...

  5. 【Java面试题】53 能不能自己写个类,也叫java.lang.String?

    可以,但是即使你写了这个类,也没有用. 这个问题涉及到加载器的委托机制,在类加载器的结构图(在下面)中,BootStrap是顶层父类,ExtClassLoader是BootStrap类的子类,ExtC ...

  6. EasyTouch的使用官方文档操作步骤

    对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很 ...

  7. Unity获取指定资源目录下的所有文件

    使用前需要引入System.IO;这个命名空间 public void GetFiles() { //路径 //string path = string.Format("{0}", ...

  8. ChemDraw教程之怎么连接ChemDraw结构

    将两个独立的ChemDraw结构连接到一起是使用者学习操作ChemDraw绘制窗口内容的基本能力之一.为了进一步了解ChemDraw软件,本教程将具体为您介绍怎么连接ChemDraw结构. 一.化学结 ...

  9. angularJs 页面{{xxx}}使用三目运算符

    <td>{{::item.sex=='w'?'女':'男'}}</td>,记得引号.也可以不用::,用不用::的区别,自行百度

  10. JQuery------jQuery.parseHTML()的使用方法

    代码: $(document).ready(function () { var data = jQuery.parseHTML("<p>你好</p>"); ...