您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
Android中怎么利用EditTextLayout自定义密码输入?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
布局
<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/delete" android:layout_width="30dp" android:layout_height="48dp" android:layout_gravity="center" android:scaleType="center" android:src="@drawable/ico_delete"/> <CheckBox android:id="@+id/ck_shift" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pwd_selector" android:button="@null"/> </merge>
用于密码输入的自定义控件
/**
* Created by showdy on 2017/3/15.
* <p>
* 一个用于密码输入的自定义控件
*/
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);
}
}
/**
* Called when a new child is aded to this ViewGroup. Overrides should always
* call super.onViewAdded.
*
* @param child the added child view
*/
@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);
}
/**
* 用于是否显示密码
*
* @param password
* @param focused
*/
private void updateDeleteIcon(String password, boolean focused) {
if (!TextUtils.isEmpty(password) && focused) {
mDeleteIcon.setVisibility(VISIBLE);
} else {
mDeleteIcon.setVisibility(INVISIBLE);
}
}
/**
* 用于控制是否显示密码
*
* @param checked
*/
private void updateShowPassword(boolean checked) {
if (checked) {
mEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
mEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
mEditText.setSelection(mEditText.getText().toString().length());
}
}看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。