android 的 AutoCompleteTextView 控件实现了输入框的输入提示功能,这个功能更加使用于国外的手机用户来使用。而很多时候国人更多的是要象百度那样我输入的是拼音也能将中文提示出来,如:输入xinlang  就能提示:新浪、新浪微博等。又或者是输入:xl 拼音首字母也能做到。这样的提示才是更加的符合国人的习惯。

先上图,看效果:


        先简单的介绍下AutoCompleteTextView 控件的基本用法:这个在android的sdk里也是有介绍的,下面是sdk中介绍的实现代码:

public class CountriesActivity extends Activity {     protected void onCreate(Bundle icicle) {         super.onCreate(icicle);         setContentView(R.layout.countries);         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,                 android.R.layout.simple_dropdown_item_1line, COUNTRIES);         AutoCompleteTextView textView = (AutoCompleteTextView)                 findViewById(R.id.countries_list);         textView.setAdapter(adapter);     }     private static final String[] COUNTRIES = new String[] {         "Belgium", "France", "Italy", "Germany", "Spain"     }; }
从上面的代码可到实现这个功能是很简单的,只要将一个要提示的数组绑定到ArrayAdapter中,再将ArrayAdapter和 AutoCompleteTextView 控件绑定一起。

下面来说下我的功能的实现方式:

public class AutoTestActivity extends Activity {
    /** Called when the activity is first created. */
ArrayList> list = new ArrayList>();


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        addItems();
        AutoCompleteTextView ac = (AutoCompleteTextView)findViewById(R.id.autocomplete);
        SimpleAdapter notes = new SimpleAdapter( 
        this, 
        list,
        R.layout.main_item_three_line_row,
        new String[] { "brandSearchText", "brandName"},
        new int[] { R.id.searchText, R.id.brandName } );        
        ac.setAdapter(notes);
        ac.setThreshold(1);

ac.setOnItemClickListener(new OnItemClickListener(){



@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView tv = (TextView)arg1.findViewById(R.id.brandName);
ac.setText(tv.getText().toString()+" ");
ac.setSelection((ac.getText().toString()).length());
}

});
    }
    
    private void addItems() {
    HashMap item;


    item = new HashMap();
    item.put( "brandSearchText", "NOKIA nuojiya NJY");
    item.put( "brandName", "诺基亚");
    list.add( item );


    item = new HashMap();
    item.put( "brandSearchText", "SVMSUN SX sanxing");
    item.put( "brandName", "三星");
    list.add( item );
   
   
    item = new HashMap();
    item.put( "brandSearchText", "摩托罗拉  moto MTLL motuoluola motoloar");
    item.put( "brandName", "摩托罗拉");
    list.add( item );


    }


}

1.我这里将不使用ArrayAdapter而是用SimpleAdapter。

2.用程序把所有的搜索词语拼接成 brandSearchText字段,用空格隔开。比如:“诺基亚 NOKIA  njy nuojiya”,把它作为搜索词。    注意这个拼接过程应该只做一次,然后保存在静态变量里面,以便提高效率。因为只要你的提示词的一多数据量大了就会使提示的速度减慢。 还有就是这里最好是把要提示的文本放在 brandName字段 如“诺基亚”,这样的话就不要在searchText字段中添加“诺基亚”不然提示会出现重复。 将准备好的方法放在 ArrayList>中这里的数据也可以是从数据库中添加 3.然后再将数据放到 SimpleAdapter 中与AutoCompleteTextView 绑定自定义一个提示显示的listItem布局,在布局只用的显示brandSearchText字段数据的textview隐藏: <?xml version="1.0" encoding="utf-8"?>
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="wrap_content" android:id="@+id/brandName" />

android:layout_height="wrap_content" android:id="@+id/searchText"
android:visibility="gone" />
4.这样就不会把不需要显示的内容显示出来。 到这里还有最后一步,如果不做的话这里点击提示词的某一行后,显示在输入框中的内容将会是这样的:{brandName=三星, brandSearchText=SVMSUN SX sanxing} 所以最后我们要对item的点击事件做处理:

ac.setOnItemClickListener(new OnItemClickListener(){

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView tv = (TextView)arg1.findViewById(R.id.brandName);
ac.setText(tv.getText().toString()+" ");
ac.setSelection((ac.getText().toString()).length());
}

});

到了这里就基本完成了。

更多相关文章

  1. 插件入门,Android(安卓)Studio 生成 ButterKnife 注入的插件,修改
  2. Android(安卓)小項目之---Toast對象詳細使用,兼溫習前內容(附源碼)
  3. android studio生成JKS时候提示:JKS 密钥库使用专用格式。建议使
  4. Android(安卓)提示Your project contains error(s),please fix t
  5. Android(安卓)更新获取 请求头 Rxjava+Retrofit2 响应头(Headers
  6. android 底部弹出提示框的实现方式
  7. Android(安卓)项目导入后真机运行提示:W/dalvikvm(10375): VFY 错
  8. Android:Could not GET xxxx Received status code 500 from serv
  9. 使用系统资源的引用总结以及收到短信后给一个notification提示

随机推荐

  1. Android N中UI硬件渲染(hwui)的HWUI_NEW_OP
  2. Android实现无标题栏全屏的方法
  3. Android ListView 去除边缘阴影、选中色
  4. Android(安卓)判断网络连接状态
  5. [Android] ContentProvider实例详解
  6. Android NDK工程的编译和链接调试
  7. Android中的小技巧:TextView限制行数和字
  8. android用户界面之ScrollView教程实例汇
  9. Android屏幕解锁图案破解
  10. Android(安卓)图像处理(类型转换,比例缩放,