ログイン画面等々でよくある、パスワードを表示させるやつ。
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/
コメント