package com.huaweixia.clear;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.text.Editable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import androidx.viewpager.widget.ViewPager;
/**
* @author huaweixia
* @description 自带清除功能的密码输入框
* @date 2020/12/28 9:54
*/
public class ClearEditText extends RelativeLayout {
private ImageView ivLeftIcon;
private EditText myEdie;
private ImageView ivEditClean;
private ImageView ivEditEye;
private boolean isChecked = true;
private Context mContext;
private TypedArray mTypedArray;
private boolean showClean = true;//清空图标是否显示,true:显示
private boolean showEye = false;//密码可见图标是否显示,true:显示
private int drawableLeft = -1;//是否显示输入框左侧图片
private int drawableEyeOpen = R.drawable.clear_icon_eye_open;//可以看见密码小眼睛样式
private int drawableEyeClose = R.drawable.clear_icon_eye_close;//不可见密码小眼睛样式
private int drawableClean = R.drawable.clear_icon_close;//清除按钮图片
private int cleanPadding = 0;//清除按钮padding边距
private String hintStr;
private String textStr;
private int mTextColorHint = Color.BLACK;
private int mTextColor = Color.BLACK;
private int mTextSize = -1;
private int mMaxLength = 2000;
private int mMaxLines = 1;
private int mInputType = 0;//输入类型,就做了不限制、数字、文本密码三种
private boolean isInput = false;//输入1个字符后更改状态为true,保证小眼睛移动一次
private boolean isHideClean = false;//输入字符后,清除了需要小眼睛归为,清除按钮隐藏
private int ivWidth = 45;//关闭按钮的宽度
public ClearEditText(Context context) {
super(context);
mContext = context;
initView();
}
public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
mTypedArray = mContext.obtainStyledAttributes(attrs, R.styleable.myEditText);
initView();
}
public ClearEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mTypedArray = mContext.obtainStyledAttributes(attrs, R.styleable.myEditText);
showClean = mTypedArray.getBoolean(R.styleable.myEditText_showClean, showClean);
drawableClean = mTypedArray.getResourceId(R.styleable.myEditText_drawableClean, drawableClean);
cleanPadding = mTypedArray.getDimensionPixelSize(R.styleable.myEditText_cleanPadding, cleanPadding);
showEye = mTypedArray.getBoolean(R.styleable.myEditText_showEye, showEye);
drawableLeft = mTypedArray.getResourceId(R.styleable.myEditText_drawableLeft, -1);
drawableEyeClose = mTypedArray.getResourceId(R.styleable.myEditText_drawableEyeClose, drawableEyeClose);
drawableEyeOpen = mTypedArray.getResourceId(R.styleable.myEditText_drawableEyeOpen, drawableEyeOpen);
hintStr = mTypedArray.getString(R.styleable.myEditText_hint);
textStr = mTypedArray.getString(R.styleable.myEditText_text);
mTextColorHint = mTypedArray.getColor(R.styleable.myEditText_textColorHint, mTextColorHint);
mTextColor = mTypedArray.getColor(R.styleable.myEditText_textColor, mTextColor);
mTextSize = mTypedArray.getDimensionPixelSize(R.styleable.myEditText_textSize, mTextSize);
mMaxLength = mTypedArray.getInteger(R.styleable.myEditText_maxLength, mMaxLength);
mMaxLines = mTypedArray.getDimensionPixelSize(R.styleable.myEditText_maxLines, mMaxLines);
mInputType = mTypedArray.getInteger(R.styleable.myEditText_inputType, mInputType);
mTypedArray.recycle();
initView();
}
// 初始化视图
private void initView() {
View view = View.inflate(getContext(), R.layout.clear_layout_view, null);
ivLeftIcon = (ImageView) view.findViewById(R.id.iv_edit_left_icon);
myEdie = (EditText) view.findViewById(R.id.view_edit_show);
ivEditClean = (ImageView) view.findViewById(R.id.iv_edit_clean);
ivEditEye = (ImageView) view.findViewById(R.id.iv_edit_eye);
myEdie.setHint(hintStr);
myEdie.setHintTextColor(mTextColorHint);
myEdie.setText(textStr);
myEdie.setTextColor(mTextColor);
myEdie.setMaxLines(mMaxLines);
myEdie.setFilters(new InputFilter[]{new InputFilter.LengthFilter(mMaxLength)});
if (mTextSize != -1) {
myEdie.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
} else {
myEdie.setTextSize(15);
}
if (mInputType == 1) {
myEdie.setInputType(InputType.TYPE_CLASS_NUMBER);
} else if (mInputType == 2) {
myEdie.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
} else {
myEdie.setInputType(InputType.TYPE_NUMBER_VARIATION_NORMAL | InputType.TYPE_CLASS_TEXT);
}
if (showEye) {
myEdie.setTransformationMethod(new AsteriskPasswordTransformationMethod());
}
if (showClean && showEye) {
int left = myEdie.getPaddingLeft();
int top = myEdie.getPaddingTop();
int bottom = myEdie.getPaddingBottom();
myEdie.setPadding(left, top, Utils.dp2px(mContext, 90), bottom);
} else if (!showClean && !showEye) {
int left = myEdie.getPaddingLeft();
int top = myEdie.getPaddingTop();
int right = myEdie.getPaddingRight();
int bottom = myEdie.getPaddingBottom();
myEdie.setPadding(left, top, right, bottom);
} else {
int left = myEdie.getPaddingLeft();
int top = myEdie.getPaddingTop();
int bottom = myEdie.getPaddingBottom();
myEdie.setPadding(left, top, Utils.dp2px(mContext, 45), bottom);
}
myEdie.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) {
if (s.length() > 0) {
isHideClean = false;
}
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0 && !isInput) {//输入字符大于0且只有一个字符时候显示清除按钮动画,小眼睛移动出位置给清除按钮使用
showEditClean();
moveEditEye();
isInput = true;
} else if (s.length() == 0) {//无字符小眼睛归位
UndoEditEye();
}
if (s.length() == 0 & !isHideClean) {
hideEditClean();
isHideClean = true;
isInput = false;
}
if (onEditInputListener != null) {
onEditInputListener.input(getText());
}
}
});
setEditClean(showClean);
ivEditClean.setOnClickListener(new OnClickListener() {
@Override
public
Android开发 自带清除按钮 密码可见 自定义EditText输入框
需积分: 5 152 浏览量
2021-01-03
17:46:42
上传
评论
收藏 504KB RAR 举报
花尾虾
- 粉丝: 0
- 资源: 10
最新资源
- 基于MATLAB的PCA算法人脸识别项目源码+GUI界面+说明文档.zip
- 基于STM32的测量温度与压力的数据处理设计源码+论文(毕业设计).zip
- 基于C51带字库LCD12864(ST7920)的keil工程源码,只支持8位并口通讯(不支持串口),可显示中文.zip
- 基于SI4463射频模块433MD-SMA无线模块软硬件技术资料及(SI4463)IC技术资料文档.zip
- (GPS+北斗+GSM)HLK-GS2503模块软硬件开发资料包硬件参考设计(原理图PCB)+技术文档资料.zip
- 基于BERT+Biaffine结构的关系抽取模型源码+文档说明.zip
- 利用c语言编写的冒泡排序代码
- 基于Ansoft-HFSS知识总结hfss中文教程HFSS培训教材等技术资料合集(50个).zip
- 基于Python+OpenCV的材料缺陷检测程序项目源码课程设计.zip
- 基于c语言实现的二叉树代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈