AutoCompleteTextView 自定义提示样式
项目中用到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 自定义提示样式的更多相关文章
- Siteserver-stl:searchOutput(搜索结果)自定义显示样式
stl:searchOutput 自定义显示样式 自定义搜索提交表单需要在<stl:searchOutput>中嵌入显示搜索结果的标签,必须包含的标签 有<stl:pageConte ...
- 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自定义提示折线图 效果预览 实例代码 <div class="htmleaf-container"> <div ...
- jQuery自定义滚动条样式插件mCustomScrollbar
如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScro ...
- 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示分割线.
一, 经历 1> 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示cell 下面的分割线. 2> 尝试使用表格的separatorStyle属性,尝试失败. ...
随机推荐
- android屏幕密度规律及dp px转换
px和dp(sp) 之间转化公式: 1 乘以(dp转px)或者除以(px转dp) scal缩放因子,在上浮0.5f /** * 密度转换像素 * */ public static int dip2p ...
- Oracle死锁查询及批量处理
一.数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错. 二.死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做 ...
- 剑指offer一之二维数组中的查找
一.题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.解答方法: 方法 ...
- React 安装
1.安装 node 8.0以上 node -v npm -v 2.安装淘宝镜像 cnpm npm install -g cnpm --registry=https://registry.npm.ta ...
- CentOS 6.5 安装和使用Gitlab
环境:CentOS 6.5 x64 min GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. htt ...
- Liferay7.0与cas单点登录配置
1.简介 Liferay7.0支持多种登录方式,包括:常规的.opensso.cas.ntlm.ldap.openid.Facebook.Google等. 其中, (1) 常规:则是默认Lif ...
- es-05-获取 resthighlevelclient及api
在6.x以前, 使用最多的是transportclient, 但在7.x会被废弃, 先说以前的创建方式: 具体可见:https://www.cnblogs.com/wenbronk/p/6383194 ...
- linux比较文件夹的差异命令
可以使用 diff -ruNa s1 s2 或者使用 diff -uN c1 c2 结果如下: sandbox$ tree . |-- dir1 | |-- a.txt | `-- b.txt `-- ...
- python get请求
#!/usr/bin/python #-*- coding:UTF-8 -*-#coding=utf-8 import requests import time import hashlib impo ...
- 复刻smartbits的国产网络测试工具minismb-如何测试协议限速
复刻smartbits的网络性能测试工具MiniSMB,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和最 ...