ログイン画面等々でよくある、パスワードを表示させるやつ。
kotlinで早速実装してみたが、一旦パスワードを表示してしまうと、パスワードが非表示に戻らない。
何これ?ということで若干ハマった。
this.imagePassword.setOnClickListener {
if (editPassword.inputType == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
// hide password
runOnUiThread {
editPassword.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD
imagePassword.setImageResource(R.drawable.ic_show)
}
} else {
// show password
runOnUiThread {
editPassword.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
imagePassword.setImageResource(R.drawable.ic_hide)
}
}
}
TYPE_TEXT_VARIATION_PASSWORDでパスワードを非表示にする訳だから、表示させるにはTYPE_TEXT_VARIATION_VISIBLE_PASSWORDだよな?というのが自然な流れだが。
これだと表示されない。
this.imagePassword.setOnClickListener {
if (editPassword.inputType == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
// hide password
runOnUiThread {
editPassword.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
imagePassword.setImageResource(R.drawable.ic_show)
}
} else {
// show password
runOnUiThread {
editPassword.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
imagePassword.setImageResource(R.drawable.ic_hide)
}
}
}
パスワードを非表示にする時、TYPE_CLASS_TEXT or TYPE_TEXT_VARIATION_PASSWORDを指定すると表示・非表示ができるようになる。
たったこれだけのことなのに若干ハマった。
この他にもMATERIAL DESIGNのcom.google.android.material.textfield.TextInputLayoutを使う方法もあるが、デザインが変わってしまうので。
今回はこの方法にした。
株式会社woodsmallの小林でした。
https://woodsmall.co.jp/
コメント