介绍
很常见的一个功能,大部分app在登录界面都会实现这个功能了。因为在掘金上看了一篇类似的文章,所以决定自己实践一下。
下图为实现效果:
常见实现方法
- 组合控件,EditText + Button
实现简单,可以单独使用。 - 自定义View,继承EditText,通过EditText自带的Drawable来实现。
布局复杂度低
继承EditText来实现一键清功能
需要考虑的问题
根据业务场景,有以下几个问题需要我们在实现中考虑到:
1. 怎么添加清空按钮
2. 怎么处理点击事件
3. 处理清空按钮的显示状态
3.1 有文字时才显示清空按钮,没有文字则掩藏。
3.2 获取焦点时才显示清空按钮,没有焦点时则隐藏
3.3 EditText的setErrot方法调用后,清空按钮怎么处理
4. 添加自定义的属性
实现流程
带着上面的问题我们开始一步步实现自定义View。
步骤1:继承EditText,实现构造方法
public class ClearableEditText extends EditText
implements EditText.OnFocusChangeListener {
public static final String TAG = "ClearableEditText";
public ClearableEditText(Context context) {
this(context, null);
}
public ClearableEditText(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.editTextStyle);
}
public ClearableEditText(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ClearableEditText(Context context, AttributeSet attrs, int defStyleAttr, int
defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs, defStyleAttr, defStyleRes);
}
}
步骤二:添加清空按钮
TextView中有一个静态内部类Drawables