您的位置:首页 > 移动开发 > 微信开发

addTextChangedListener和TextWatcher实现微信编辑框的输入监听效果

2014-12-06 15:56 411 查看
     最近在做一个仿照微信的UI设计,其中微信的输入框监听效果挺人性化的,倘若编辑框里面没有内容,登录按钮就不高亮,并且不让你登录。所以在网上找一下实现的方法,最后发现了有addTextChangedListener 这么一个东东。最后实现效果还是不错滴( ^_^ )。废话不多说,进入正文。

   

      addTextChangedListener内部定义了三个方法:分别是

      @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(CharSequence s, int start, int count,int after) { }
//输入接受后监听编辑框的情况
</pre><pre class="java" name="code">

 

        其中的CharSequence s参数表示的是编辑框的内容,int start表示的是未输入时编辑框的文字长度,int before表示的是输入后文本的长度。

        其中的onTextChanged方法不太了解其用法,但onTextChange方法则可以在输入过程中监听用户的输入,如果用户输入不应该出现的字符,你就可以在这个输入过程中检验输入的合法性,并给与提示。而afterTextChange方法则监听输入结束后的文本情况。

        在这里我们则用afterTextChange监听输入后的情况,检验编辑框的字符是否为空。但是微信上面有两个输入框,分别是用户名和密码。所以在需要在编辑框里面监听本编辑框不为空的同时检验另一个编辑框的字符不为空,才能让按钮高亮。粗略的设计了一下,基本实现了功能。

 




 

phone_account.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) {
if(s.length()!=0){
clean_account.setImageResource(R.drawable.editview_clean);
if(phone_password.getText().toString().equals("")){
login.setBackgroundResource(R.drawable.button_green_useless);
}else{login.setBackgroundResource(R.drawable.button_green);}
}
else{clean_account.setImageResource(R.drawable.touming);
login.setBackgroundResource(R.drawable.button_green_useless);}
}});

phone_account.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
if(phone_account.getText().toString().equals("")){}else{
clean_account.setImageResource(R.drawable.editview_clean);
}
phone.setBackgroundResource(R.drawable.editview_bord_onfocus);
clean_password.setImageResource(R.drawable.touming);
}else {
phone.setBackgroundResource(R.drawable.editview_bord_unfocus);}
} });
phone_password.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) {
if(s.length()!=0){
clean_password.setImageResource(R.drawable.editview_clean);
if(phone_account.getText().toString().equals("")){
login.setBackgroundResource(R.drawable.button_green_useless);
}else{login.setBackgroundResource(R.drawable.button_green);}
}
else{clean_password.setImageResource(R.drawable.touming);
login.setBackgroundResource(R.drawable.button_green_useless);}
}});

phone_password.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
if(phone_password.getText().toString().equals("")){}else{
clean_password.setImageResource(R.drawable.editview_clean);
}
password.setBackgroundResource(R.drawable.editview_bord_onfocus);
clean_account.setImageResource(R.drawable.touming);
}else {
password.setBackgroundResource(R.drawable.editview_bord_unfocus);}
}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: