android autocompletetextview 自定义,AutoCompleteTextView 自定义提示样式

项目中用到AutoCompleteTextView  自动提示功能,如果用自带的ArrayAdapter就一种样式,非常丑,而且每一项提示文字过多的话不会自动换行。

所以自己自定义了一个适配器。

效果图:

android autocompletetextview 自定义,AutoCompleteTextView 自定义提示样式_第1张图片

1、每一项的布局文件:(可以自己定义)

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/text1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center_vertical"

android:layout_marginLeft="@dimen/dimen_10"

android:layout_marginRight="@dimen/dimen_10"

android:layout_marginTop="@dimen/dimen_5"

android:layout_marginBottom="@dimen/dimen_5"

android:textSize="@dimen/textsize_14"

android:lineSpacingExtra="@dimen/dimen_4"

android:singleLine="false" />

android:layout_width="match_parent"

android:layout_height="@dimen/dimen_2"

android:background="@color/line_bg"

android:layout_marginLeft="@dimen/dimen_10"

android:layout_marginRight="@dimen/dimen_5"/>

这里用android:lineSpacingExtra="@dimen/dimen_4"属性指定了一下行间距。

2、适配器代码如下:

package nari.app.BianDianYingYong.adapter;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Filter;

import android.widget.Filterable;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

import nari.app.BianDianYingYong.R;

/**

* Created by weihao on 2018/5/28.

* 继承BaseAdapter,实现Filterable

*/

public class AutoEditTextAdapter extends BaseAdapter implements Filterable {

private ArrayFilter mFilter;

private List mList;

private Context context;

private ArrayList mUnfilteredData;

public AutoEditTextAdapter(List mList, Context context) {

this.mList = mList;

this.context = context;

}

@Override

public int getCount() {

return mList==null ? :mList.size();

}

@Override

public Object getItem(int position) {

return mList.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view;

ViewHolder holder;

if(convertView==null){

view = View.inflate(context, R.layout.autotext_list_item, null);

holder = new ViewHolder();

holder.text1 = (TextView) view.findViewById(R.id.text1);

view.setTag(holder);

}else{

view = convertView;

holder = (ViewHolder) view.getTag();

}

String pc = mList.get(position);

holder.text1.setText("-- "+pc);

return view;

}

static class ViewHolder{

public TextView text1;

}

@Override

public Filter getFilter() {

if (mFilter == null) {

mFilter = new ArrayFilter();

}

return mFilter;

}

private class ArrayFilter extends Filter {

@Override

protected FilterResults performFiltering(CharSequence prefix) {

FilterResults results = new FilterResults();

if (mUnfilteredData == null) {

mUnfilteredData = new ArrayList(mList);

}

if (prefix == null || prefix.length() == ) {

ArrayList list = mUnfilteredData;

results.values = list;

results.count = list.size();

} else {

String prefixString = prefix.toString().toLowerCase();

ArrayList unfilteredValues = mUnfilteredData;

int count = unfilteredValues.size();

ArrayList newValues = new ArrayList(count);

for (int i = ; i < count; i++) {

String pc = unfilteredValues.get(i);

if (pc != null) {

if(pc!=null && pc.startsWith(prefixString)){

newValues.add(pc);

}else if(pc!=null && pc.startsWith(prefixString)){

newValues.add(pc);

}

}

}

results.values = newValues;

results.count = newValues.size();

}

return results;

}

@Override

protected void publishResults(CharSequence constraint,

FilterResults results) {

mList = (List) results.values;

if (results.count > ) {

notifyDataSetChanged();

} else {

notifyDataSetInvalidated();

}

}

}

}

3、调用:

//获取控件实例

AutoCompleteTextView et_wtms = (AutoCompleteTextView) layout.findViewById(R.id.et_wtms);

//设置输入一个字就自动提示,默认是两个

et_wtms.setThreshold();

AutoEditTextAdapter adapter = new AutoEditTextAdapter(key, context);

et_wtms.setAdapter(adapter);

et_wtms.addTextChangedListener(new TextWatcher() {//文字改变事件

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override

public void afterTextChanged(Editable s) {

}

});

//点击就自动提示

et_wtms.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

et_wtms.showDropDown();

}

});

Siteserver-stl:searchOutput(搜索结果)自定义显示样式

stl:searchOutput 自定义显示样式 自定义搜索提交表单需要在中嵌入显示搜索结果的标签,必须包含的标签 有

VaildForm 自定义提示消息

ValidForm插件提供了7种提示效果,其中有四种自定义效果,具体访问地址:http://validform.rjboy.cn/demo.html 个人偏爱其中两种,即 l 提示效果四:[自定义提示 ...

在ASP.NET中引用自定义提示框

在html网页中自定义提示框 正文: 在一般的B/S架构中项目,与用户的交互信息是非常重要的.在一般的情况下,设计人员都在把用户信息呈现在html中,用div和span去弹出相关信息.对于一般的情况而 ...

Android设置选项开发及自定义Preference样式

一个完整的Android应用程序都应该提供选项(或者叫偏好设置等等)让用户对APP的表现形式能够进行设置,比如说是否加入用户体验计划,或者是否自动升级.定时提醒.开启自启动.后台运行等等.提供一个好的 ...

vue2.0 自定义 提示框(Toast)组件

1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var sho ...

vue 自定义 提示框(Toast)组件

1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var sho ...

超酷HTML5 Canvas图表应用Chart.js自定义提示折线图

超酷HTML5 Canvas图表应用Chart.js自定义提示折线图 效果预览 实例代码

jQuery自定义滚动条样式插件mCustomScrollbar

如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScro ...

自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示分割线.

一, 经历 1> 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示cell 下面的分割线. 2> 尝试使用表格的separatorStyle属性,尝试失败. ...

随机推荐

OpenStack 企业私有云的若干需求(3):多租户和租户间隔离(multi-tenancy and isolation)

本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

Masonry自动布局

介绍,入门: http://www.cocoachina.com/ios/20141219/10702.html 下载: http://code.cocoachina.com/detail/30114 ...

ThinkPHP3.1新特性:Action参数绑定

Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了.这一新特性对以往的操作方法使用没有任何影响,你也可以用 ...

android高仿微信拍照、多选、预览、删除(去除相片)相冊功能

先声明授人与鱼不如授人与渔,仅仅能提供一个思路,当然须要源代码的同学能够私下有偿问我要源代码:QQ:508181017 工作了将近三年时间了,一直没正儿八经的研究系统自带的相冊和拍照,这回来个高仿微信 ...

【一】仿微信飞机大战cocos2d-x3.0rc1

參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战  cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...

如果一个Object对象可能是集合或者数组那么如何对其进行迭代

需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是集合,包括Collection和Map,也 ...

LintCode题解之判断是否为平方数之和

简单粗暴 public class Solution { /* * @param : the given number * @return: whether whether there're two ...

Codeforces 799 D. Field expansion

题目链接:http://codeforces.com/contest/799/problem/D 因为${a_i>=2}$那么一个数字至多操作${log_{2}^{max(a,b)/min(h, ...

新的blog站地址

自己用Jekyll搭建了一个静态blog网站 以后的blog随笔就更新在:https:/blog.hudunsec.cn

Go语言判断if else语句

基本格式: if 条件语句{ 执行语句 }else{ 执行语句 } package main import "fmt" func main(){ fmt.Println(Add(- ...

你可能感兴趣的:(android,自定义)