Java
Android
初心者向け

【Android】パスワードを表示させる機能をサクッと実装する

Password Visibility Toggleとは別の方法です。
Samplerはこちら

イメージ

実装

Pattern0はヤツですが、今回はPattern1の紹介です。
わかりやすいようにTextInputLayoutを使っていますが、使わなくても大丈夫なので
Password Visibility Toggleに頼らずにカスタマイズしたい!って人向けです。

XML

activity_main.xml
<!-- 略 -->
    <!-- Pattern 1 -->
    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!-- password -->
        <android.support.design.widget.TextInputEditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="password"/>
    </android.support.design.widget.TextInputLayout>

    <!-- パスワードの表示非表示 -->
    <CheckBox
        android:id="@+id/password_visibility"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="10dp"
        android:text="パスワードを表示する"/>

<!-- 略 -->

Activity

MainActivity.java
//略

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextInputEditText password = (TextInputEditText)findViewById(R.id.password);

        CheckBox passwordVisibilityCheckBox = (CheckBox) findViewById(R.id.password_visibility);

        // パスワード切り替えチェックボックス
        passwordVisibilityCheckBox.setOnClickListener((View v) -> {

            // パスワードのカーソル位置保存
            int cursorPos = password.getSelectionStart();

            boolean checked = passwordVisibilityCheckBox.isChecked();
            if (checked) {
                // パスワード可視化
                password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                // カーソル位置セット
                password.setSelection(cursorPos);
            } else {
                // パスワード不可視化
                password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                password.setSelection(cursorPos);
            }
        });
    }
}


はい完成!

終わりに

もっといい実装があるよ!って方、コメントお待ちしてます!!