Android输入框控件ClearEditText实现清除功能

2019-12-10 18:02:22于海丽

setClearIconVisible()方法,设置隐藏和显示清除图标的方法,我们这里不是调用setVisibility()方法,setVisibility()这个方法是针对View的,我们可以调用setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)来设置上下左右的图标
setOnFocusChangeListener(this) 为输入框设置焦点改变监听,如果输入框有焦点,我们判断输入框的值是否为空,为空就隐藏清除图标,否则就显示
addTextChangedListener(this) 为输入框设置内容改变监听,其实很简单呢,当输入框里面的内容发生改变的时候,我们需要处理显示和隐藏清除小图标,里面的内容长度不为0我们就显示,否是就隐藏,但这个需要输入框有焦点我们才改变显示或者隐藏,为什么要需要焦点,比如我们一个登陆界面,我们保存了用户名和密码,在登陆界面onCreate()的时候,我们把我们保存的密码显示在用户名输入框和密码输入框里面,输入框里面内容发生改变,导致用户名输入框和密码输入框里面的清除小图标都显示了,这显然不是我们想要的效果,所以加了一个是否有焦点的判断
setShakeAnimation(),这个方法是输入框左右抖动的方法,之前我在某个应用看到过类似的功能,当用户名错误,输入框就在哪里抖动,感觉挺好玩的,其实主要是用到一个移动动画,然后设置动画的变化率为正弦曲线

接下来我们来使用它,Activity的布局,两个我们自定义的输入框,一个按钮

<RelativeLayout xmlns:android="http://www.easck.com/apk/res/android" 
  xmlns:tools="http://www.easck.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:background="#95CAE4"> 
 
 
  <com.example.clearedittext.ClearEditText 
    android:id="@+id/username" 
    android:layout_marginTop="60dp" 
    android:layout_width="fill_parent" 
    android:background="@drawable/login_edittext_bg"  
    android:drawableLeft="@drawable/icon_user" 
    android:layout_marginLeft="10dip" 
    android:layout_marginRight="10dip" 
    android:singleLine="true" 
    android:drawableRight="@drawable/delete_selector" 
    android:hint="输入用户名" 
    android:layout_height="wrap_content" > 
 
  </com.example.clearedittext.ClearEditText> 
 
  <com.example.clearedittext.ClearEditText 
    android:id="@+id/pass