热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android自定义密码输入EditTextLayout

这篇文章主要为大家详细介绍了Android自定义密码输入EditTextLayout,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了Android自定义密码输入的具体代码,供大家参考,具体内容如下

布局

<&#63;xml version="1.0" encoding="utf-8"&#63;>


  

  

用于密码输入的自定义控件

/**
 * Created by showdy on 2017/3/15.
 * 

* 一个用于密码输入的自定义控件 */ 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()); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
author-avatar
好人langren_840
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有