栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android 带有删除按钮的EditText

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 带有删除按钮的EditText

MainActivity如下:

package cc.textview5; 
import android.os.Bundle; 
import android.text.TextUtils; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
import android.app.Activity; 
 
public class MainActivity extends Activity { 
  private CleanableEditText mUserNameCleanableEditText; 
  private CleanableEditText mPassWordCleanableEditText; 
  private Button mLoginButton; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    init(); 
  } 
   
  private void init(){ 
    mUserNameCleanableEditText=(CleanableEditText) findViewById(R.id.userNameEditText); 
    mPassWordCleanableEditText=(CleanableEditText) findViewById(R.id.passwordEditText); 
    mLoginButton=(Button) findViewById(R.id.loginButton); 
    mLoginButton.setonClickListener(new onClickListenerImpl()); 
  } 
   
  private class onClickListenerImpl implements onClickListener { 
    @Override 
    public void onClick(View view) { 
      if (TextUtils.isEmpty(mUserNameCleanableEditText.getText())) { 
 mUserNameCleanableEditText.setShakeAnimation(); 
 Toast.makeText(MainActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show(); 
      } 
 
      if (TextUtils.isEmpty(mPassWordCleanableEditText.getText())) { 
 mPassWordCleanableEditText.setShakeAnimation(); 
 Toast.makeText(MainActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); 
      } 
    } 
 
  } 
   
 
} 

CleanableEditText如下:

package cc.textview5; 
 
import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.CycleInterpolator; 
import android.view.animation.TranslateAnimation; 
import android.widget.EditText; 
 
public class CleanableEditText extends EditText { 
  private Drawable mRightDrawable; 
  private boolean isHasFocus; 
   
  public CleanableEditText(Context context) { 
    super(context); 
    init(); 
  } 
  public CleanableEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
  } 
 
  public CleanableEditText(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
  } 
   
  private void init(){ 
    //getCompoundDrawables: 
    //Returns drawables for the left, top, right, and bottom borders. 
    Drawable [] drawables=this.getCompoundDrawables(); 
     
    //取得right位置的Drawable 
    //即我们在布局文件中设置的android:drawableRight 
    mRightDrawable=drawables[2];   
     
    //设置焦点变化的监听 
    this.setonFocusChangeListener(new FocusChangeListenerImpl()); 
    //设置EditText文字变化的监听 
    this.addTextChangedListener(new TextWatcherImpl()); 
    //初始化时让右边clean图标不可见 
    setClearDrawableVisible(false); 
  } 
   
   
   
  @Override 
  public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_UP: 

      boolean isClean =(event.getX() > (getWidth() - getTotalPaddingRight()))&& 
 (event.getX() < (getWidth() - getPaddingRight())); 
      if (isClean) { 
 setText(""); 
      } 
      break; 
 
    default: 
      break; 
    } 
    return super.onTouchEvent(event); 
  } 
   
  private class FocusChangeListenerImpl implements OnFocusChangeListener{ 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
isHasFocus=hasFocus; 
if (isHasFocus) { 
  boolean isVisible=getText().toString().length()>=1; 
  setClearDrawableVisible(isVisible); 
      } else { 
  setClearDrawableVisible(false); 
      } 
    } 
     
  } 
   
  //当输入结束后判断是否显示右边clean的图标 
  private class TextWatcherImpl implements TextWatcher{ 
    @Override 
    public void afterTextChanged(Editable s) { 
boolean isVisible=getText().toString().length()>=1; 
setClearDrawableVisible(isVisible); 
    } 
 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count,int after) { 

    } 
 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before,int count) { 

    } 
     
  }   
   
  //隐藏或者显示右边clean的图标 
  protected void setClearDrawableVisible(boolean isVisible) { 
    Drawable rightDrawable; 
    if (isVisible) { 
      rightDrawable = mRightDrawable; 
    } else { 
      rightDrawable = null; 
    } 
    //使用代码设置该控件left, top, right, and bottom处的图标 
    setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1],  
 rightDrawable,getCompoundDrawables()[3]); 
  }  
 
  // 显示一个动画,以提示用户输入 
  public void setShakeAnimation() { 
    this.setAnimation(shakeAnimation(5)); 
  } 
 
  //CycleTimes动画重复的次数 
  public Animation shakeAnimation(int CycleTimes) { 
    Animation translateAnimation = new TranslateAnimation(0, 10, 0, 10); 
    translateAnimation.setInterpolator(new CycleInterpolator(CycleTimes)); 
    translateAnimation.setDuration(1000); 
    return translateAnimation; 
  } 
 
} 

main.xml如下:

 
 
   
   
    
    
   

以上就是对Android   带有删除按钮的EditText的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/161288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号