本文为大家分享了Android自定义密码输入的具体代码,供大家参考,具体内容如下
布局
用于密码输入的自定义控件
public class PwdEditLayout extends LinearLayout implements TextWatcher, View.OnFocusChangeListener,
View.OnClickListener, CompoundButton.onCheckedChangeListener {
private ImageView mDeleteIcon;
private CheckBox mShiftIcon;
private EditText mEditText;
public PwdEditLayout(Context context) {
this(context, null);
}
public PwdEditLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PwdEditLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setOrientation(HORIZONTAL);
setCustomBackground();
}
private void setCustomBackground() {
GradientDrawable gd = new GradientDrawable();
gd.setCornerRadius(TypedValue.applyDimension(COMPLEX_UNIT_DIP, 4, Resources.getSystem().getDisplayMetrics()));
gd.setStroke((int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, 1, Resources.getSystem().getDisplayMetrics()), Color.BLUE);
if (Build.VERSION.SDK_INT < 16) {
this.setBackgroundDrawable(gd);
} else {
this.setBackground(gd);
}
}
@Override
public void onViewAdded(View child) {
super.onViewAdded(child);
if (child instanceof EditText) {
if (getChildCount() != 1) {
throw new IllegalArgumentException("only one EditText can be added in this layout.");
}
mEditText = (EditText) child;
mEditText.setBackgroundColor(Color.TRANSPARENT);
//关键点1
LayoutInflater.from(getContext()).inflate(R.layout.layout_edittext_pwd, this, true);
mDeleteIcon = (ImageView) findViewById(R.id.delete);
mShiftIcon = (CheckBox) findViewById(R.id.ck_shift);
//关键点2
setAddStatesFromChildren(true); //使得父类获得和子控件相同的状态
mEditText.addTextChangedListener(this);
mEditText.setonFocusChangeListener(this);
mDeleteIcon.setonClickListener(this);
mShiftIcon.setonCheckedChangeListener(this);
//设置默认状态---删除按钮和是否显示密码
mShiftIcon.setChecked(false);
updateDeleteIcon(mEditText.getText().toString(), mEditText.isFocused());
updateShowPassword(mShiftIcon.isChecked());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
updateDeleteIcon(s.toString(), mEditText.isFocused());
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
updateDeleteIcon(mEditText.getText().toString(), hasFocus);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.delete:
mEditText.setText("");
break;
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
updateShowPassword(isChecked);
}
private void updateDeleteIcon(String password, boolean focused) {
if (!TextUtils.isEmpty(password) && focused) {
mDeleteIcon.setVisibility(VISIBLE);
} else {
mDeleteIcon.setVisibility(INVISIBLE);
}
}
private void updateShowPassword(boolean checked) {
if (checked) {
mEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
mEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
mEditText.setSelection(mEditText.getText().toString().length());
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



