标签:android 文档 界面 advancedautocomplete android应用
AutoCompletedEditView 搜索 变色
下载地址:http://download.csdn.net/detail/menglele1314/8639965
这个就不用说了,本人语言表达能力有点差,多多包含
public class AppActivity extends Activity {
private AdvancedAutoCompleteTextView tv;
private AutoCompleteAdapter adapter;
private ArrayList<String> mOriginalValues = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mOriginalValues.add("1234561");
mOriginalValues.add("1234562");
mOriginalValues.add("2234563");
mOriginalValues.add("2234564");
mOriginalValues.add("3234561111");
mOriginalValues.add("32345622222");
mOriginalValues.add("323456333333");
mOriginalValues.add("3234564444");
mOriginalValues.add("3234565555");
mOriginalValues.add("32345666666");
mOriginalValues.add("32345777777");
tv = (AdvancedAutoCompleteTextView) findViewById(R.id.tv);
tv.setThreshold(0);
adapter = new AutoCompleteAdapter(this, mOriginalValues, 10);
tv.setAdapter(adapter);
}
}
自定义搜索所要展示的布局
public class AdvancedAutoCompleteTextView extends RelativeLayout {
private Context context;
private AutoCompleteTextView tv;
public AdvancedAutoCompleteTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.context = context;
}
public AdvancedAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context = context;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
initViews();
}
private void initViews() {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
tv = new AutoCompleteTextView(context);
tv.setLayoutParams(params);
tv.setPadding(10, 0, 40, 0);
// tv.setSingleLine(true);
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
p.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
p.addRule(RelativeLayout.CENTER_VERTICAL);
p.rightMargin = 10;
ImageView iv = new ImageView(context);
iv.setLayoutParams(p);
iv.setScaleType(ScaleType.FIT_CENTER);
iv.setImageResource(R.drawable.delete);
iv.setClickable(true);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("");
}
});
this.addView(tv);
this.addView(iv);
}
public void setAdapter(AutoCompleteAdapter adapter) {
tv.setAdapter(adapter);
}
public void setThreshold(int threshold) {
tv.setThreshold(threshold);
}
public AutoCompleteTextView getAutoCompleteTextView() {
return tv;
}
}
主要是过滤适配
public class AutoCompleteAdapter extends BaseAdapter implements Filterable {
private Context context;
private ArrayFilter mFilter;
private ArrayList<String> mOriginalValues;// 所有的Item
private List<String> mObjects;// 过滤后的item
private final Object mLock = new Object();
private int maxMatch = 10;// 最多显示多少个选项,负数表示全部
private int number;
public AutoCompleteAdapter(Context context,
ArrayList<String> mOriginalValues, int maxMatch) {
this.context = context;
this.mOriginalValues = mOriginalValues;
this.maxMatch = maxMatch;
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if (mFilter == null) {
mFilter = new ArrayFilter();
}
return mFilter;
}
//Log.i("sfasfd", results.count+"");
private class ArrayFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
// TODO Auto-generated method stub
FilterResults results = new FilterResults();
if (prefix == null || prefix.length() == 0) {
synchronized (mLock) {
Log.i("tag",
"mOriginalValues.size=" + mOriginalValues.size());
ArrayList<String> list = new ArrayList<String>(
mOriginalValues);
results.values = list;
results.count = list.size();
return results;
}
} else {
number = prefix.length();
String prefixString = prefix.toString().toLowerCase();
final int count = mOriginalValues.size();
final ArrayList<String> newValues = new ArrayList<String>(count);
for (int i = 0; i < count; i++) {
final String value = mOriginalValues.get(i);
final String valueText = value.toLowerCase();
if (valueText.startsWith(prefixString)) { // 源码 ,匹配开头
newValues.add(value);
}
if (maxMatch > 0) {// 有数量限制
if (newValues.size() > maxMatch - 1) {// 不要太多
break;
}
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// TODO Auto-generated method stub
mObjects = (List<String>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mObjects.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
// 此方法有误,尽量不要使用
return mObjects.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(
R.layout.simple_list_item_for_autocomplete, null);
holder.tv = (TextView) convertView.findViewById(R.id.simple_item_0);
holder.iv = (ImageView) convertView
.findViewById(R.id.simple_item_1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//改变字体颜色
//先构造SpannableString
SpannableString spanString = new SpannableString(mObjects.get(position));
//再构造一个改变字体颜色的Span
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
//将这个Span应用于指定范围的字体
spanString.setSpan(span, 0, number, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//设置给EditText显示出来
holder.tv.setText(spanString);
holder.iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String obj = mObjects.remove(position);
mOriginalValues.remove(obj);
notifyDataSetChanged();
}
});
return convertView;
}
class ViewHolder {
TextView tv;
ImageView iv;
}
public ArrayList<String> getAllItems() {
return mOriginalValues;
}
}
标签:android 文档 界面 advancedautocomplete android应用
原文地址:http://blog.csdn.net/menglele1314/article/details/45331571