edittext 监听内容变化
给EditText追加ChangedListener可以监听EditText内容变化的监听
如图是效果图 类似于过滤的一种实现

1 布局也就是一个EditText,当EditText内容发生变化时(当输入数字时)就会出现一个PopupWindow通过ChangedListener来显示监听
2 数据是进入这个页面就加载出来的,当输入的内容变化时,通过遍历改变
3 字体颜色的变化http://www.cnblogs.com/sinber/archive/2011/10/27/2227012.html
Demo下载地址:http://download.csdn.net/detail/qq_29774291/9728733
如下是主要代码:
package com.item.demo; import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.text.Editable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextWatcher;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.LinearLayout.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; /**
* EditText的一个Demo 实现EditText + PopupWindow来实现搜索的功能
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private PopupWindow popupWindow;
private ListView lView;
private MyAdapter adapter;
private EditText edtText;
private List<String> list = new ArrayList<String>();
private List<SpannableString> carNumber = new ArrayList<SpannableString>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtText = (EditText) findViewById(R.id.edt_hello);
initData();
adapter = new MyAdapter(this, carNumber);
edtText.addTextChangedListener(new TextWatcher() { @Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
if(s.length() > 0){
if(popupWindow == null){
View contentView = View.inflate(MainActivity.this, R.layout.item_list, null);
lView = (ListView)contentView.findViewById(R.id.item_list);
popupWindow = new PopupWindow(contentView,edtText.getWidth(),LayoutParams.WRAP_CONTENT,true);
}
carNumber.clear();
for(String str : list){
if(str.startsWith("" + s)){
SpannableString ss = new SpannableString(str);
ss.setSpan(new ForegroundColorSpan(Color.BLUE), 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
carNumber.add(ss);
}
}
if(carNumber.size() == 0){
SpannableString ssString = new SpannableString("无该车牌号");
ssString.setSpan(new ForegroundColorSpan(Color.RED), 0, ssString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
carNumber.add(ssString);
}
adapter.notifyDataSetChanged();
lView.setAdapter(adapter);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(false);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popupWindow.showAsDropDown(edtText, 0, 0);
if(carNumber.size() >=5){
popupWindow.update(edtText.getWidth(), 250);
}else {
popupWindow.update(edtText.getWidth(), LayoutParams.WRAP_CONTENT);
}
lView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
edtText.setText(carNumber.get(arg2).toString());
if(popupWindow !=null && popupWindow.isShowing()){
popupWindow.dismiss();
}
}
});
}
} @Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub } @Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub }
});
}
/**
* 模拟数据
*/
private void initData(){
list.add("皖A0000");
list.add("皖A1000");
list.add("皖A1100");
list.add("皖A1110");
list.add("皖A1111");
list.add("皖A2000");
list.add("皖A2100");
list.add("皖A2110");
list.add("皖A2111");
list.add("皖A2200");
list.add("皖A2201");
list.add("皖A2210");
list.add("皖A2211");
list.add("皖A2223");
list.add("皖A3000");
list.add("皖A4030");
list.add("皖A5000");
list.add("皖A6200");
list.add("皖A7060");
list.add("皖A8070");
list.add("皖A9000");
}
/**
* 适配器
* @author Administrator
*
*/
private class MyAdapter extends BaseAdapter{
private Context context;
private List<SpannableString> carList; public MyAdapter(Context context, List<SpannableString> carList) {
super();
this.context = context;
this.carList = carList;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return carList.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
ViewHoler holer = null;
if(arg1 == null) {
holer = new ViewHoler();
arg1 = View.inflate(context, R.layout.item_adpter, null);
holer.tv_name = (TextView)arg1.findViewById(R.id.item_carnum);
arg1.setTag(holer);
}else {
holer = (ViewHoler)arg1.getTag();
}
holer.tv_name.setText(carList.get(arg0));
return arg1;
}
class ViewHoler{
private TextView tv_name;
}
} }
edittext 监听内容变化的更多相关文章
- 监听内容变化 TextWatcher @功能
监听多个TextView的内容变化 使用示例 TextWatcherUtils.addTextChangedListener(isAllNotEmpty -> btnLogin.setEnabl ...
- DOMNodeInserted,DOMNodeRemoved 和监听内容变化插件
元素的增加 删除 及事件监听 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- node.js监听文件变化
前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...
- 009——VUE中watch监听属性变化实现类百度搜索栏功能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- iOS开发之--为UITextField监听数值变化的三种方法
项目中有个验证码输入直接验证跳转页面,用的RAC来监听textfield的输入值,如下: @weakify(self); [self.codeView.textField.rac_textSignal ...
- Angular.js中使用$watch监听模型变化
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- $scope.$watch()——监听数据变化
$scope.$watch(watchFn, watchAction, [deepWatch]):监听数据变化,三个参数 --watchFn:监听的对象,一个带有Angular 表达式或者函数的字符串 ...
- 如何使用NodeJs来监听文件变化
1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工 ...
- android动态注册监听网络变化异常
在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.A ...
随机推荐
- Gamma校正与线性工作流
1 Gamma校正是什么?8位亮度值x(0-1)经过x^0.45的一个提亮过程. 2 为什么需要Gamma校正 人的眼睛是以非线性方式感知亮度,在自然界中,人感觉到的一半亮度其实只有全部能量的0.2, ...
- PowerShell读取Windows产品密钥
之前大多数人可能用过VBS读取Windows产品密钥的VBS脚本,VBS脚本通常都比较隐晦.难懂,今天忙里偷闲,随手写了一个用于读取Windows产品密钥的PowerShell脚本. 代码如下: == ...
- Qt编写可换肤的中文双拼汉字输入法
时间过得真快,不知不觉已到2015年,农历春节一眨眼就过去了,端正状态收拾心情整装待发出发. 曾经有段时间,我有一个很执着的梦想,我要导演出一部空前绝后的巨幕.不过现实无情地碾碎我的梦想,也同时将我推 ...
- php socket
socket demo代码如下 : server: server.php <?php //phpinfo(); //确保在连接客户端时不会超时 set_time_limit(0); $ip = ...
- [0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程
忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象 ...
- 如何在mac os中安装gdb及为gdb进行代码签名
1. 安装gdb GDB作为一个强大的c/c++调试工具,一直是程序猿们的良好伴侣,但转到Mac os才发现竟然没有默认安装,所幸还有强大的homebrew工具: brew install homeb ...
- Raspberry Pi 3 Model B 安装 OSMC
Raspberry Pi 3 Model B 自身搭载 WIFI 芯片,可直接连接无线网络. 准备 NOOBS 你可以购买预装有 NOOBS 的 SD 卡,或者从树莓派官网 下载 NOOBS.zip ...
- DDD:Command模式的好处
背景 会有朋友问我为啥用命令模式(Command Pattern)组织应用层,先看看MartinFowler咋说:http://martinfowler.com/bliki/CommandOrient ...
- 使用TFS+GIT实现分布式项目管理
前言 GIT是近来很流行的一种版本控制系统,是Linux内核之父Linus Torvalds为了管理Linux内核的开发而开发的一种开源的版本控制工具. GIT相比传统的版本控制工具最大的优点是实现了 ...
- Tips1:用 Export Package选项来分享你的成果
如果你不是一个人工作,你可能需要和其他人共享一个工程文件,Unity工程文件中的一些关键元素默认是隐藏的,因此通过复制Assets文件夹的方法并不完善.Unity自带的UnityPackage格式的文 ...