본문 바로가기

안드로이드 심심풀이/응용

[안드로이드 스튜디오]EditText Masking

반응형

EditText Masking

EditText의 inputType이 password, numberPassword, textPassword 등 일 경우 자동으로 Masking처리가 되어 입력한 문자를 변환

이러한 Masking 처리를 할 때 안드로이드에서는 기본적으로 아래와 같은 동그란 문자로 표현이 됨

EditText Masking 변경 방법

  1. 익명 클래스로 선언 (프로젝트에서 한번만 사용하는 경우) 
    • mBinding.inputNumber.setTransformationMethod(new PasswordTransformationMethod(){
                  @Override
                  public CharSequence getTransformation(CharSequence source, View view) {
                      return new PasswordCharSequence(source);
                  }
      
                  class PasswordCharSequence implements CharSequence {
                      private final CharSequence source;
      
                      public PasswordCharSequence(CharSequence source) {
                          this.source = source;
                      }
      
                      @Override
                      public int length() {
                          return source.length();
                      }
      
                      @Override
                      public char charAt(int index) {
                          // 여기에서 마스킹할 문자를 정의
                          return '*'; // '*' 대신 다른 문자로 변경 가능
                      }
      
                      @Override
                      public CharSequence subSequence(int start, int end) {
                          return source.subSequence(start, end);
                      }
                  }
              });
  2. PasswordTransformationMethod 커스텀마이징 (여러 군데에서 계속 사용하는 경우) 
    • import android.text.method.PasswordTransformationMethod;
      import android.view.View;
      
      public class CustomPasswordTransformationMethod extends PasswordTransformationMethod {
      
          @Override
          public CharSequence getTransformation(CharSequence source, View view) {
              return new PasswordCharSequence(source);
          }
      
          private static class PasswordCharSequence implements CharSequence {
              private CharSequence source;
      
              public PasswordCharSequence(CharSequence source) {
                  this.source = source;
              }
      
              @Override
              public int length() {
                  return source.length();
              }
      
              @Override
              public char charAt(int index) {
                  // 여기에서 마스킹할 문자를 정의
                  return '*'; // '*' 대신 다른 문자로 변경 가능
              }
      
              @Override
              public CharSequence subSequence(int start, int end) {
                  return source.subSequence(start, end);
              }
          }
      }
    • mBinding.inputNumber.setTransformationMethod(new CustomPasswordTransformationMethod());

주의할 점

  • 위와 같이 setTransformationMethod를 통해 masking 문자를 설정 할 경우 EditText의 InputType이 password, numberPassword, textPassword 등이 아니어도 문자가 Masking 처리가 됨
반응형