[Kotlin]EditTextのパスワードの表示制御

  •  

 

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

関連記事

コメント

この記事へのコメントはありません。

TOP