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中,如果我们需 ...
随机推荐
- Android Studio编译错误:Unexpected lock protocol found in lock file. Expected 3, found 0.
如果不小心手动修改了.gradle文件夹中的内容,那么再打开之前编译成功的工程时,会出现类似下面的错误: Gradle app neame project refresh failed: Unexpe ...
- 第三百节,python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型
python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型 delete(*names)根据删除redis中的任意数据类型 #!/usr/bin/env pyt ...
- circso 对数据进行可视化
circos可以用来绘制圈图,能够对染色体上的数据进行可视化,首先需要一个染色体的文件 染色体的文件如下,每列之间空格分隔 chr - chr1 chr1 chr - chr2 chr2 chr - ...
- 基于bootstrap的Dialog
function yms_Dialog(container_id, modal_path, handle_function) { /// <summary> /// ...
- ThinkPHP的ajaxReturn方法的使用
ThinkPHP后端的代码如下: public function testAjax(){ $this->ajaxReturn(array('name'=>'z','age'=>18) ...
- centos7 安装hadoop 集群遇到的问题
集群安装之后,hdfs 不能上传文件,也提示rute等错误,其实是防火墙问题,关闭防火墙即可. CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.firewa ...
- Ubuntu 14.04 Server i386 安装 Oracle11g_11.2.0.3 RAC
文档地址:doc 文档地址:doc
- Unity利用UI的Mask实现对精灵Sprite的遮挡
例如剔除掉船超出河流的一部分,实现让船只在河流之上显示. 其实是利用UI层的Mask实现遮罩,有些不同的是Mask的图片是用Camera渲染到RenderTexture动态产生的纹理实现的.大概步骤如 ...
- sftp,get命令使用*通配符的方式获取批量的文件
需求描述: 今天在使用sftp进行get文件的时候,有很多文件名类似的文件,以为还是需要一个一个get 后来发现get也可以使用通配符的方式进行匹配获取多个文件,在此记录下 操作过程: 1.通过sft ...
- 基于pyteseract google ocr的图形验证码识别
先灰化图片,把图片二值化,利用pytesseract包的pytesseract.image_to_string转换出文字.