Android自定义密码输入EditTextLayout
作者:showdy
这篇文章主要为大家详细介绍了Android自定义密码输入EditTextLayout,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文为大家分享了Android自定义密码输入的具体代码,供大家参考,具体内容如下
布局
<?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()); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- Android 登录页面的实现代码(密码显示隐藏、EditText 图标切换、限制输入长度)
- Android EditText随输入法一起移动并悬浮在输入法之上的示例代码
- Android EditText每4位自动添加空格效果
- Android EditText追加空格、限制字符等方法示例
- Android EditText长按菜单中分享功能的隐藏方法
- Android中多个EditText输入效果的解决方式
- Android实现微信朋友圈评论EditText效果
- Android EditText监听回车键并处理两次回调问题
- Android实现EditText添加下划线
- Android EditText限制输入整数和小数的位数的方法示例
- Android使用EditText小技巧汇总