Android中修改源码实现AutoCompeteTextView控件的模糊匹配
2012-07-07 23:43
513 查看
最近在做Android开发,使用其控件AutoCompleteTextView时发现只能实现前缀匹配,也就是说只能匹配以所输入的字符开始的数据,觉得google这个做的不好,不够人性化。要是数据非常多,而又确实不记得所要找的数据以什么字符开始的,那该怎么办呢?哈哈,作为中国共产党领导下的共产主义下的和谐社会下的伟大而又苦X的程序猿,这小小的问题怎么能难得住我们。
大家知道,Android系统是开源的,也就是说我们可以通过修改其源码来解决这个问题。
先看截图:
上图中左边是AutoCompeteTextView控件前缀匹配结果,右边的是通过修改其源码实现其中缀和后缀匹配。
接下来说下怎么修改Android源码,当然要想修改其源码,必须要下载Android源码,建议有条件的童鞋们使用Git工具自己下载,因为Android系统一直在更新,其源码也在不断地更改。懒虫们可以从博文结尾的链接中下载。
首先在android\widget的目录下找到ArrayAdapter.java文件并打开,下面是部分源码:
项目目录结构如下:
下面是Main Activity,写了注释:
只要注意这里的ArrayAdapter使用的是自己修改的,前面加上包名以示区别。
项目源码下载:http://download.csdn.net/detail/zhang957411207/4416554
Android2.2源码下载:http://download.csdn.net/detail/zhang957411207/4416564
本人QQ:957411207,欢迎交流。
大家知道,Android系统是开源的,也就是说我们可以通过修改其源码来解决这个问题。
先看截图:
上图中左边是AutoCompeteTextView控件前缀匹配结果,右边的是通过修改其源码实现其中缀和后缀匹配。
接下来说下怎么修改Android源码,当然要想修改其源码,必须要下载Android源码,建议有条件的童鞋们使用Git工具自己下载,因为Android系统一直在更新,其源码也在不断地更改。懒虫们可以从博文结尾的链接中下载。
首先在android\widget的目录下找到ArrayAdapter.java文件并打开,下面是部分源码:
private class ArrayFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); if (mOriginalValues == null) { synchronized (mLock) { mOriginalValues = new ArrayList<T>(mObjects); } } if (prefix == null || prefix.length() == 0) { synchronized (mLock) { ArrayList<T> list = new ArrayList<T>(mOriginalValues); results.values = list; results.count = list.size(); } } else { String prefixString = prefix.toString().toLowerCase(); final ArrayList<T> values = mOriginalValues; final int count = values.size(); final ArrayList<T> newValues = new ArrayList<T>(count); for (int i = 0; i < count; i++) { final T value = values.get(i); final String valueText = value.toString().toLowerCase(); // First match against the whole, non-splitted value if (valueText.startsWith(prefixString)) { newValues.add(value); } else { final String[] words = valueText.split(" "); final int wordCount = words.length; for (int k = 0; k < wordCount; k++) { if (words[k].startsWith(prefixString)) { newValues.add(value); break; } } } } results.values = newValues; results.count = newValues.size(); } return results; }找到”if (words[k].startsWith(prefixString)) {“这行,将其改为“if (words[k].indexOf(prefixString)!=-1) {”便可。还需将ArrayAdapter所属的包改为自己的包。如果以后还会用到,建议将其打包为.jar文件。
项目目录结构如下:
下面是Main Activity,写了注释:
public class AutoCompleteTextViewActivity extends Activity { /** Called when the activity is first created. */ private AutoCompleteTextView actv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] s=new String[]{"aaaa","abcd","bbac","dbca"}; actv=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1); //系统默认为前缀匹配 //android.widget.ArrayAdapter<String> adapter=new android.widget.ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,s); //通过修改android源码实现中缀和后缀匹配 com.zhang.autocomplete.ArrayAdapter<String> adapter=new com.zhang.autocomplete.ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,s); //Specifies the minimum number of characters the user has to type in the edit box before the drop down list is shown. //setThreshold的参数也就是说要实现匹配所应输入的最小字符数,这里为1,指只要输入一个字符便开始匹配,为2则需输入2个字符才开始匹配,以此类推 actv.setThreshold(1); actv.setAdapter(adapter); } }
只要注意这里的ArrayAdapter使用的是自己修改的,前面加上包名以示区别。
项目源码下载:http://download.csdn.net/detail/zhang957411207/4416554
Android2.2源码下载:http://download.csdn.net/detail/zhang957411207/4416564
本人QQ:957411207,欢迎交流。
相关文章推荐
- Android中修改源码实现AutoCompeteTextView控件的模糊匹配
- Android中修改源码实现AutoCompeteTextView控件的模糊匹配
- Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入数字长度
- android autocompletetextview(自动匹配控件)类比listview
- AutoCompleteTextView 控件实现提示文本以及模糊查询
- Android程序:文字匹配实现(AutoCompleteTextView和MultiAutoCompleteTextView)
- 安卓控件——AutoCompleteTextView和MultiAutoCompleteTextView实现自动匹配输入的内容
- Android控件之自动匹配输入内容AutoCompleteTextView
- Android布局中动态修改TextView等控件中文字的颜色
- AutoCompleteTextView控件自定义下拉框背景,点击效果,字体显示效果,匹配条件等效果
- android AutoCompleteTextView控件的使用
- Android-常用UI控件(Spinner/AutoCompleteTextView)
- Android AutoCompleteTextView实现
- Android实现SharePreferences和AutoCompletedTextView
- Android AutoCompleteTextView控件使用实例
- Android TextView实现点击显示全文与隐藏功能(附源码)
- Android控件之AutoCompleteTextView、MultiAutoCompleteTextView探究
- Android AutoCompleteTextView实现历史记录
- Android进阶——自定义View之扩展系统控件的另一种思路实现渐变文字动画的TextView
- Android控件---AutoCompleteTextView