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

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

效果图:

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

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <TextView xmlns:android="http://schemas.android.com/apk/res/android"
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" /> <View
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"/> </LinearLayout>

这里用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<String> mList;
private Context context;
private ArrayList<String> mUnfilteredData; public AutoEditTextAdapter(List<String> 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<String>(mList);
} if (prefix == null || prefix.length() == ) {
ArrayList<String> list = mUnfilteredData;
results.values = list;
results.count = list.size();
} else {
String prefixString = prefix.toString().toLowerCase(); ArrayList<String> unfilteredValues = mUnfilteredData;
int count = unfilteredValues.size(); ArrayList<String> newValues = new ArrayList<String>(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<String>) 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();
}
});

AutoCompleteTextView 自定义提示样式的更多相关文章

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

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

  2. VaildForm 自定义提示消息

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

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

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

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

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

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

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

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

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

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

    超酷HTML5 Canvas图表应用Chart.js自定义提示折线图 效果预览 实例代码 <div class="htmleaf-container"> <div ...

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

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

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

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

随机推荐

  1. IDEA快捷键--与Eclipse快捷键的对比--IDEA快捷键设置成Eclipse默认快捷键

    部分内容转载于:http://blog.csdn.net/dc_726/article/details/9531281 IntelliJ Idea 常用快捷键列表 Ctrl+Alt+t 选择代码块 t ...

  2. 使用makefile

    最近在学习一个处理二维相场问题的c++程序,遇到了makefile文件,之前没有接触过,这里做一个简单的整理. 什么是makefile? 大多程序员使用的windows操作系统,IED都完成了make ...

  3. 全网最详细的Windows系统里PLSQL Developer 32bit的下载与安装过程(图文详解)

    不多说,直接上干货! 注意的是: 本地若没有安装Oracle服务端,Oracle server服务端32位,是远程连接,因此本地配置PLSQL Developer32位. PLSQL Develope ...

  4. [原] ubuntu安装Fcitx输入法

    1.终端输入: sudo add-apt-repository ppa:wengxt/fcitx-nightly 按回车确认添加 2.sudo apt-get update 更新软件源 3.sudo ...

  5. GO入门——3. 控制语句

    1 if 条件表达式没有括号 支持一个初始化表达式(可以是并行方式) 左大括号必须和条件语句或else在同一行 支持单行模式 初始化语句中的变量为block级别,同时隐藏外部同名变量 a := 1 i ...

  6. vmware workstation 下安装ubuntu

    安装时我是借鉴 https://blog.csdn.net/xiaohua0877/article/details/78507631 期间遇到几个问题 键盘不好使,解决办法是重新运行wmware wo ...

  7. Visual Studio最好用的快捷键(你最喜欢哪个)

    每次在网上搜关于VS有哪些常用快捷键的时候,出来的永远是一串长的不能再长的列表,完全没体现出“常用”二字,每次看完前面几个就看不下去了,相信大家都 有这种感觉.其实我们平时用的真的只有很少的一部分,借 ...

  8. visual studio code 个人设置

    { "vim.disableAnnoyingNeovimMessage": true, "php.validate.executablePath": " ...

  9. Docker环境下搭建DNS LVS(keepAlived) OpenResty服务器简易集群

    现在上网已经成为每个人必备的技能,打开浏览器,输入网址,回车,简单的几步就能浏览到漂亮的网页,那从请求发出到返回漂亮的页面是怎么做到的呢,我将从公司中一般的分层架构角度考虑搭建一个简易集群来实现.目标 ...

  10. PowerBuilder编程新思维2:嵌入(Thread多线程)

    PowerBuilder编程新思维2:嵌入(Thread多线程) 在PB中使用多线程,在网上有大量的文章介绍.不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇& ...