项目中用到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. odoo 开发基础 -- 视图之widget

    Odoo 中的widget many2many_tags one2many_list selection progressbar selection statusbar handle monetary ...

  2. oracle RAC srvctl命令关闭节点实例的时候 不能正常执行

    场景描述: [oracle@oracle01 admin]$ srvctl stop database -d oradb1 PRCD- : The resource for database ORAD ...

  3. Python之Pyautogui模块20180125《PYTHON快速上手让繁琐的工作自动化》18章

    复习 PyAutoGUI 的函数本章介绍了许多不同函数,下面是快速的汇总参考:moveTo(x,y)将鼠标移动到指定的 x.y 坐标.moveRel (xOffset,yOffset)相对于当前位置移 ...

  4. 源码分析篇 - Android绘制流程(一)窗口启动流程分析

    Activity.View.Window之间的关系可以用以下的简要UML关系图表示,在这里贴出来,比较能够帮组后面流程分析部分的阅读. 一.Activity的启动流程 在startActivity() ...

  5. redis源码学习-dict

    1.字典相关的几个结构体 dict由hash table存储key-value, hash table数组每一个元素存放dictEntry链接的链表头结点,dictEntry节点存放key-value ...

  6. List集合中的对象按照某个字段去重实现

    package com.liying.banana.user; import java.util.ArrayList; import java.util.Comparator; import java ...

  7. 浅析Java源码之Math.random()

    从零自学java消遣一下,看书有点脑阔疼,不如看看源码!(๑╹◡╹)ノ""" ​ JS中Math调用的都是本地方法,底层全是用C++写的,所以完全无法观察实现过程,Jav ...

  8. 在MVC应用程序中使用jQuery的验证

    呵呵,觉得很久没有写博客了,均是工作忙于公司的ERP系统,这是正确的,因为这才是真正的工作. 今天想写点在MVC应用程序中,使用jQuery来验证.在进行之前,还是先回看一下<MVC会员注册&g ...

  9. web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)

    这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步 ...

  10. 使用whiptail写linux字符界面ssh链接工具2.0

    先看一下效果 选择分组 选择服务器 开始链接 为什么写 之前写过一个字符界面的链接工具,但是看起来比较简陋,他是这个样子的: 看起来十分不好看.后来在网上看到shell中有一个whiptail工具可以 ...