Android Edittext完全隐藏密码
Android Edittext Completely Hide Password
通常设置 inputType=textPassword
用于用户输入任何有风险的内容的字段,例如...密码。当用户键入它时,他们键入的每个字符都会短暂闪烁,让用户知道实际输入的是什么,然后变成星号,这样不经意的观察者(间谍)就很难看到键入的内容。
通常这很好用。
我有一个特殊情况,出于安全原因,不得闪烁该字符。相反,我只想显示星号。
我可以通过 setOnKeyListener()
单独处理每个点击,但看起来这应该很容易。但是我没有看到任何内置解决方案。请告诉我我遗漏了什么。
你没有遗漏任何东西,我过去一直在努力解决这个问题,直到现在 我没有找到任何内置解决方案,我已经使用 addTextChangedListener
执行此操作和外部库。
禁用此设置完全符合您的要求,它适用于每个应用程序,但我想您只能通过代码更改此设置 phone。
我知道这不是解决方案,但它声明这对开发人员不可用,我们必须自己做。
编辑:
评论提供了很好的解决方案,但正如您所说,不是内置的。
感谢所有评论、督促并指出优秀技巧的人。使用这些宝贵的帮助,我能够做一些实际上非常简单并且似乎非常适合这种情况的事情。
诀窍是覆盖 PasswordTransformationMethod 并强制您的 EditText 使用这个新方法。最初的 charAt()
方法使用 Spannable,它在隐藏它之前等待一秒半。通过覆盖该方法,您的代码可以做一些更简单的事情。
这是自定义的示例 class(在 kotlin 中)
class ReallyHideMyPassword : PasswordTransformationMethod() {
companion object {
const val HIDE_CHAR = '*'
}
override fun getTransformation(source: CharSequence, view: View): CharSequence {
return PasswordCharSequence(source)
}
inner class PasswordCharSequence (private val source: CharSequence) : CharSequence {
override val length: Int
get() = source.length
override fun get(index: Int): Char = HIDE_CHAR
override fun subSequence(startIndex: Int, endIndex: Int): CharSequence {
return source.subSequence(startIndex, endIndex)
}
}
}
并在您的 EditText 中使用它:
val et = findViewById<EditText>(R.id.my_password_edittext)
et.transformationMethod = ReallyHideMyPassword();
事实证明这类似于 (感谢 Per.J!),但现在您在 kotlin 中有了它。它是如此相似,以至于这个问题可能会因为太相似而被关闭。但是问题的措辞应该比其他的更容易帮助人们找到答案post.
通常设置 inputType=textPassword
用于用户输入任何有风险的内容的字段,例如...密码。当用户键入它时,他们键入的每个字符都会短暂闪烁,让用户知道实际输入的是什么,然后变成星号,这样不经意的观察者(间谍)就很难看到键入的内容。
通常这很好用。
我有一个特殊情况,出于安全原因,不得闪烁该字符。相反,我只想显示星号。
我可以通过 setOnKeyListener()
单独处理每个点击,但看起来这应该很容易。但是我没有看到任何内置解决方案。请告诉我我遗漏了什么。
你没有遗漏任何东西,我过去一直在努力解决这个问题,直到现在 我没有找到任何内置解决方案,我已经使用 addTextChangedListener
执行此操作和外部库。
禁用此设置完全符合您的要求,它适用于每个应用程序,但我想您只能通过代码更改此设置 phone。
我知道这不是解决方案,但它声明这对开发人员不可用,我们必须自己做。
编辑: 评论提供了很好的解决方案,但正如您所说,不是内置的。
感谢所有评论、督促并指出优秀技巧的人。使用这些宝贵的帮助,我能够做一些实际上非常简单并且似乎非常适合这种情况的事情。
诀窍是覆盖 PasswordTransformationMethod 并强制您的 EditText 使用这个新方法。最初的 charAt()
方法使用 Spannable,它在隐藏它之前等待一秒半。通过覆盖该方法,您的代码可以做一些更简单的事情。
这是自定义的示例 class(在 kotlin 中)
class ReallyHideMyPassword : PasswordTransformationMethod() {
companion object {
const val HIDE_CHAR = '*'
}
override fun getTransformation(source: CharSequence, view: View): CharSequence {
return PasswordCharSequence(source)
}
inner class PasswordCharSequence (private val source: CharSequence) : CharSequence {
override val length: Int
get() = source.length
override fun get(index: Int): Char = HIDE_CHAR
override fun subSequence(startIndex: Int, endIndex: Int): CharSequence {
return source.subSequence(startIndex, endIndex)
}
}
}
并在您的 EditText 中使用它:
val et = findViewById<EditText>(R.id.my_password_edittext)
et.transformationMethod = ReallyHideMyPassword();
事实证明这类似于 (感谢 Per.J!),但现在您在 kotlin 中有了它。它是如此相似,以至于这个问题可能会因为太相似而被关闭。但是问题的措辞应该比其他的更容易帮助人们找到答案post.