用EditText作为密码输入框的时候,一般密文形式显示,直接在xml设置属性
android:inputType="textPassword"
即可。
有时候如下图所示,要增加密码的显示和隐藏切换功能
这个时候给那个小眼睛图标加上点击事件,来实现输入框在密文和明文两种状态间切换。一般有两种实现方式:
首先看看密文下软键盘的样式:
然后看看两种实现方式
第一种:
ivVisible.setOnClickListener {
ivVisible.isSelected = !ivVisible.isSelected
if (ivVisible.isSelected) {
etPassword.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
etPassword.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD
}
etPassword.setSelection(etPassword.text?.length?:0)
}
切换为明文时的软键盘样式:
第二种:
ivVisible.setOnClickListener {
ivVisible.isSelected = !ivVisible.isSelected
if (ivVisible.isSelected) {
etPassword.transformationMethod = HideReturnsTransformationMethod.getInstance()
} else {
etPassword.transformationMethod = PasswordTransformationMethod.getInstance()
}
etPassword.setSelection(etPassword.text?.length?:0)
}
切换为明文时的软键盘样式:
两种方式都能实现功能,但是交互上是不一样的,推荐使用第二种。原因是:第一种切换时,软键盘会在安全键盘切换成普通键盘,且软键盘有个收起和弹出的过程,体验上不佳,另外明文状态下可以输入中文,如果产品需求是不允许中文作为密码,那就基本可以放弃。反之,第二种方式就没有这些问题。