숨기기 및보기 암호 간을 전환하는 방법


176

사용자가 안드로이드 EditText에서 숨기기 및보기 암호를 전환 할 수있는 영리한 방법이 있습니까? 많은 PC 기반 앱이이를 가능하게합니다.

답변:


155

TextView의 속성을 동적으로 변경할 수 있습니다. XML Atrribute android:password를 true로 설정하면 뷰를 false로 설정하면 텍스트가 표시됩니다.

setTransformationMethod 메소드를 사용하면 코드에서이 속성을 변경할 수 있어야합니다. (면책 조항 :보기가 표시된 후에도 방법이 여전히 작동하는지 테스트하지 않았습니다. 문제가 발생하면 알려주십시오.)

전체 샘플 코드는

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

비밀번호를 숨기려면 암호를 표시하기 위해 기존 변환 방법 중 하나를 설정하거나 입력 텍스트와 관련이없는 빈 TransformationMethod 를 구현할 수 있습니다.

yourTextView.setTransformationMethod(new DoNothingTransformation());

61
비밀번호를 표시하기 위해 새 수업을 만들 필요가 없습니다. 전화 setTransformationMethod(null)하세요.
매트 퀴 글리

4
@Janusz, 다음을 사용하면 gud 솔루션이 제공됩니다. setTransformationMethod (PasswordTransformationMethod.getInstance ()); 및 setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
sujith s

@Janusz하지만 키보드에서 키를 표시하거나 숨기는 방법은 무엇입니까?
Narendra Singh

EditeText에서 setTransformationMethod를 호출 할 때 EditText의 onTextChanged 콜백이 호출됩니다 ...이 발생하지 않을 수 있습니까?
tsiro

1
옳은. "setTransformationMethod ()가 핵심입니다. 필요한 것은 리스너를 전환하는 것입니다 : etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (new PasswordTransformationMethod ()). 기본적으로 xml EditView에서 설정됩니다."android : inputType = "textPassword ""
Sergio Sergio

303

Support Library v24.2.0 이후로 달성하기가 정말 쉽습니다.

당신이해야 할 일은 단지 :

  1. 의존성에 디자인 라이브러리 추가

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
    
  2. 사용 TextInputEditText과 함께TextInputLayout

    <android.support.design.widget.TextInputLayout
        android:id="@+id/etPasswordLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        android:layout_marginBottom="@dimen/login_spacing_bottom">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/etPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/fragment_login_password_hint"
            android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>
    

passwordToggleEnabled속성은 일을 할 것입니다!

  1. 루트 레이아웃에서 추가하는 것을 잊지 마십시오 xmlns:app="http://schemas.android.com/apk/res-auto"

  2. 다음을 사용하여 비밀번호 토글을 사용자 정의 할 수 있습니다.

app:passwordToggleDrawable-비밀번호 입력 가시성 토글 아이콘으로 사용할 수 있습니다.
app:passwordToggleTint-비밀번호 입력 가시성 토글에 사용할 아이콘입니다.
app:passwordToggleTintMode-배경 색조를 적용하는 데 사용되는 혼합 모드.

TextInputLayout 문서 에서 자세한 내용을 참조하십시오 .

여기에 이미지 설명을 입력하십시오

AndroidX의 경우

  • 교체 android.support.design.widget.TextInputLayoutcom.google.android.material.textfield.TextInputLayout

  • 교체 android.support.design.widget.TextInputEditTextcom.google.android.material.textfield.TextInputEditText


버전 25.1.0에서는 이상한 동작이 있습니다. 비밀번호 토글을 한 번 표시하지만이 버튼을 누르면 o_O '가 사라집니다.
MiguelHincapieC

1
예, android:text속성이 있는 단점도 있습니다 TextInputEditText. Android 용 Google Issues Tracker
mmBs

1
@ Delta7 몇 가지 방법과 해결 방법이 있습니다. SO에 대한 질문을하고 여기에 링크를 붙여 넣으십시오. 도와 드리겠습니다.
mmBs

1
감사. 그러나 내 빌드에서는 표시 / 숨기기 그래픽이 스크린 샷에서 이상하게 반전됩니다. 비밀번호가 숨겨져 있으면 눈에 띄지 않게 표시됩니다. 누군가 결정한 버튼에 동작 (또는 목표 상태) 대신 현재 상태가 표시되어야한다고 생각합니다.
Josh Sutterfield

1
@JoshSutterfield가 동의합니다. 따라서 액션 버튼을 원하면 app:passwordToggleDrawable(더 이상 사용되지 않음) app:endIconDrawable을 사용 하여 수동으로 되돌 리거나 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_eye_close" android:state_checked="true"/> <item android:drawable="@drawable/ic_eye_open"/> </selector> Google 이이 동작을 수정해야한다고 생각 하는 맞춤 드로어 블을 사용해야 합니다. 좋은 토론
Rahmat Ihsan

112

암호 대신 점을 표시하려면 PasswordTransformationMethod를 설정하십시오.

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

물론 xml 레이아웃의 edittext 요소에서 기본적으로 이것을 설정할 수 있습니다.

android:password

읽을 수있는 비밀번호를 다시 표시하려면 변환 방법으로 null을 전달하십시오.

yourEditText.setTransformationMethod(null);

7
android:password더 이상 사용되지 않으며 android:inputType대신 사용해야 합니다.
Wilka

54
변환 방법을 설정하기 전에 커서 위치를 저장하고 그 후에 복원하여 사용자를 만족시킬 수도 있습니다. 사용 editText.getSelectionStart()editText.getSelectionEnd()커서 위치 저장과 editText.setSelection(start, end)그것을 복원.
Mostafa

2
@ Wilka : android : inputType을 사용하면 런타임에 두 상태를 앞뒤로 전환 할 수 없습니다. 한 번만 전환 할 수 있으며 일단 변경하면 다시 변경할 수 없습니다. 그리고 setTransformationMethod는 더 이상 사용되지 않습니다.
AndroidDev

@ Qlimax하지만 키보드에서 키를 표시하거나 숨기는 방법은 무엇입니까?
Narendra Singh

@DroidWormNarendra 일반적 비밀번호 입력 사이에 "눈 이미지"에 이벤트 리스너를 첨부하거나 암호 입력 내부 여기에서 설명하는 것처럼 : stackoverflow.com/questions/3554377/...를 . 그런 다음이 이벤트 리스너에서 비밀번호를 표시하거나 숨길 수 있습니다. AFAIK는 키보드에 일부 표시 / 숨기기 키를 가질 수 없습니다
Qlimax

82

표시하려면 :

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

숨기려고:

editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

이 각각의 커서 후에 재설정됩니다.

editText.setSelection(editText.length());

Android 4.3 및 5.0에서 테스트되었으며 훌륭하게 작동합니다! 문서는 API 3까지 작동하는 것처럼 보이게합니다.
James

@ MatLogan하지만 키보드에서 키를 표시하거나 숨기는 방법은 무엇입니까?
Narendra Singh

5
이것은 가장 직접적인 대답입니다. 감사. (이상한 것은 받아 들여지지 않는
Tina

런타임에 변경하면 작동하지 않는 것 같습니다. 또한 줄의 끝에 있지 않으면 사용자의 마지막 커서 위치 / 선택을 복원하지 않습니다.
Tom

31

당신이 사용할 수있는 app:passwordToggleEnabled="true"

여기에 주어진 예가 있습니다

<android.support.design.widget.TextInputLayout
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        android:textColorHint="@color/colorhint"
        android:textColor="@color/colortext">

오늘은 대답을 사용하는 것이 좋습니다
Ruslan Berozov

내 경우에는 뷰 높이가 증가합니다. 토글 드로어 블에서 패딩을 제거하는 방법이 있습니까?
Sadda Hussain

이것은 재료 구성 요소에서 더 이상 사용되지 않습니다. 사용하십시오 app:endIconMode="password_toggle".
Nicolas

13

확인란을 사용하고 그에 따라 입력 유형을 변경하십시오.

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    int start,end;
    Log.i("inside checkbox chnge",""+isChecked);
    if(!isChecked){
        start=passWordEditText.getSelectionStart();
        end=passWordEditText.getSelectionEnd();
        passWordEditText.setTransformationMethod(new PasswordTransformationMethod());;
        passWordEditText.setSelection(start,end);
    }else{
        start=passWordEditText.getSelectionStart();
        end=passWordEditText.getSelectionEnd();
        passWordEditText.setTransformationMethod(null);
        passWordEditText.setSelection(start,end);
    }
}

8
private boolean isPasswordVisible;

private TextInputEditText firstEditText;

...

firstEditText = findViewById(R.id.et_first);

...

    private void togglePassVisability() {
    if (isPasswordVisible) {
        String pass = firstEditText.getText().toString();
        firstEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
        firstEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        firstEditText.setText(pass);
        firstEditText.setSelection(pass.length());           
    } else {
        String pass = firstEditText.getText().toString();
        firstEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        firstEditText.setInputType(InputType.TYPE_CLASS_TEXT);
        firstEditText.setText(pass);
        firstEditText.setSelection(pass.length());
    }
    isPasswordVisible= !isPasswordVisible;
}

텍스트를 다시 설정할 필요는 없습니다. firstEditText.invalidate ();
Gunavant Patel

7

그것은 나를 위해 일합니다. 이것은 당신을 확실히 도울 것입니다

showpass.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(!isChecked){

                    // show password
                    password_login.setTransformationMethod(PasswordTransformationMethod.getInstance());

                    Log.i("checker", "true");
                }

                else{
                    Log.i("checker", "false");

                     // hide password
    password_login.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }

            }
        });

5

좋은 답변이 있더라도이 질문에 대답하고 싶다고 생각합니다.

문서에 따르면 TransformationMethod 는 우리의 임무를 수행합니다.

변환 방법

TextView는 TransformationMethods를 사용하여 암호 문자를 점으로 바꾸거나 줄 바꿈 문자가 한 줄 텍스트 필드에서 줄 바꿈을 일으키는 것을 방지하는 등의 작업을 수행합니다.

공지 사항 I 이용 버터 나이프,하지만 같은 경우 사용자 확인 비밀번호 표시

@OnCheckedChanged(R.id.showpass)
    public void onChecked(boolean checked){
        if(checked){
            et_password.setTransformationMethod(null);
        }else {
            et_password.setTransformationMethod(new PasswordTransformationMethod());
            
        }
       // cursor reset his position so we need set position to the end of text
        et_password.setSelection(et_password.getText().length());
    }

5

블록에 자체 포함 된 몇 줄로 ShowPassword / HidePassword 코드를 추가 할 수 있습니다.

protected void onCreate(Bundle savedInstanceState) {
    ...
    etPassword = (EditText)findViewById(R.id.password);
    etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password initially

    checkBoxShowPwd = (CheckBox)findViewById(R.id.checkBoxShowPwd);
    checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Hide initially, but prompting "Show Password"
    checkBoxShowPwd.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
            if (isChecked) {
                etPassword.setTransformationMethod(null); // Show password when box checked
                checkBoxShowPwd.setText(getString(R.string.label_hide_password)); // Prompting "Hide Password"
            } else {
                etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password when box not checked
                checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Prompting "Show Password"
            }
        }
    } );
    ...

5

나는 같은 문제가 있었고 구현하기가 매우 쉽다.

EditText 필드를 (com.google.android.material.textfield.TextInputLayout) 및 추가 (app : passwordToggleEnabled = "true")로 감싸기 만하면됩니다.

이것은 EditText 필드에 눈을 보여주고 그것을 클릭하면 암호가 나타나고 다시 클릭하면 사라집니다.

<com.google.android.material.textfield.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textColorHint="#B9B8B8"
                app:passwordToggleEnabled="true">

                <EditText
                    android:id="@+id/register_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="24dp"
                    android:layout_marginRight="44dp"
                    android:backgroundTint="#BEBEBE"
                    android:hint="Password"
                    android:inputType="textPassword"
                    android:padding="16dp"
                    android:textSize="18sp" />
            </com.google.android.material.textfield.TextInputLayout>

4
private int passwordNotVisible=1; 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
 showPassword = (ImageView) findViewById(R.id.show_password);
    showPassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText paswword = (EditText) findViewById(R.id.Password);
            if (passwordNotVisible == 1) {
                paswword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                passwordNotVisible = 0;
            } else {

                paswword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                passwordNotVisible = 1;
            }


            paswword.setSelection(paswword.length());

        }
    });
}

4

매우 간단한 형태로 :

private fun updatePasswordVisibility(editText: AppCompatEditText) {
        if (editText.transformationMethod is PasswordTransformationMethod) {
            editText.transformationMethod = null
        } else {
            editText.transformationMethod = PasswordTransformationMethod()
        }
        editText.setSelection(editText.length())
    }

도움이 되길 바랍니다.


3

아래 코드를 사용하여 비밀번호를 표시 / 숨길 수 있습니다.

XML 코드 :

<EditText
        android:id="@+id/etPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="21dp"
        android:layout_marginTop="14dp"
        android:ems="10"
        android:inputType="textPassword" >
        <requestFocus />
    </EditText>
    <CheckBox
        android:id="@+id/cbShowPwd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/etPassword"
        android:layout_below="@+id/etPassword"
        android:text="@string/show_pwd" />

자바 코드 :

EditText mEtPwd;
CheckBox mCbShowPwd;


mEtPwd = (EditText) findViewById(R.id.etPassword);
mCbShowPwd = (CheckBox) findViewById(R.id.cbShowPwd);

mCbShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // checkbox status is changed from uncheck to checked.
        if (!isChecked) {
            // show password
            mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
        } else {
            // hide password
            mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        }
    }
});

3

이 시도:

먼저 다음과 같이 플래그를 전역으로 정의하십시오.

private boolean isShowPassword = false;

그리고 show and hide password 버튼을 탭하도록 리스너를 설정하십시오.

imgPassword.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isShowPassword) {
                    etPassword.setTransformationMethod(new PasswordTransformationMethod());
                    imgPassword.setImageDrawable(getResources().getDrawable(R.drawable.ic_eye_hide));
                    isShowPassword = false;
                }else{
                    etPassword.setTransformationMethod(null);
                    imgPassword.setImageDrawable(getResources().getDrawable(R.drawable.ic_eye_show));
                    isShowPassword = true;
                }
            }
        });


2

확인란을 사용하여 비밀번호 Edit_Text 표시 및 숨기기

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:inputType="textPassword"
        android:id="@+id/edtPass"
        android:textSize="20dp"
        android:hint="password"
        android:padding="20dp"
        android:background="#efeaea"
        android:layout_width="match_parent"
        android:layout_margin="20dp"
        android:layout_height="wrap_content" />

    <CheckBox
        android:background="#ff4"
        android:layout_centerInParent="true"
        android:textSize="25dp"
        android:text="show password"
        android:layout_below="@id/edtPass"
        android:id="@+id/showPassword"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:gravity="top|right"
        android:layout_height="wrap_content" />

</RelativeLayout>

자바 코드

package com.example.root.sql2;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatCheckBox;
import android.support.v7.widget.Toolbar;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;

public class password extends AppCompatActivity {


    EditText password;
    CheckBox show_hide_password;

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



    }//end onCreate



    public void show_hide_pass(){
        show_hide_password.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (!b){
                    // hide password
                    password.setTransformationMethod(PasswordTransformationMethod.getInstance());

                }else{
                    // show password
                    password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
            }
        });
    } // end show_hide_pass




    public void findViewById(){ //  find ids ui and
        password = (EditText) findViewById(R.id.edtPass);
        show_hide_password = (CheckBox) findViewById(R.id.showPassword);
    }//end findViewById



}// end class

2

setTransformationMethod를 사용해 보셨습니까? TextView에서 상속되며 TransformationMethod를 매개 변수로 사용합니다.

TransformationMethods에 대한 자세한 내용은 여기를 참조 하십시오 .

캐릭터 교체와 같은 멋진 기능도 있습니다.


2
답변의 링크가 작동 하지 않습니다 ( "상태 코드 : 404를 찾을 수 없음") .
Pang

developer.android.com/reference/android/text/method/… 는 Android의 Transformation Methods에 대한 더 나은 URL 일 수 있습니다.
Mr.Drew

1

내가 한 것은

  1. 텍스트 편집보기 및 일반 텍스트보기 만들기
  2. 제약 조건 레이아웃을 사용하여 서로 겹치게하십시오 (Facebook 앱 로그인 화면과 동일).
  3. onClickListener를 일반 텍스트보기에 연결하여 편집 텍스트보기의 입력 유형을 적절하게 변경하십시오 (표시 / 보이지 않음)

https://youtu.be/md3eVaRzdIM에 대한 자세한 단계와 설명을 보려면 이 비디오를 확인 하십시오.

그것이 도움이되기를 바랍니다 :)


1

다음은 TextInputEditText 및 Transformation 메서드를 사용하지 않는 솔루션입니다.

XML

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            style="@style/FormLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/username" />

        <EditText
            android:id="@+id/loginUsername"
            style="@style/EditTextStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/ic_person_outline_black_24dp"
            android:drawableStart="@drawable/ic_person_outline_black_24dp"
            android:inputType="textEmailAddress"
            android:textColor="@color/black" />

        <TextView
            style="@style/FormLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="@string/password" />

        <EditText
            android:id="@+id/loginPassword"
            style="@style/EditTextStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableEnd="@drawable/ic_visibility_off_black_24dp"
            android:drawableLeft="@drawable/ic_lock_outline_black_24dp"
            android:drawableRight="@drawable/ic_visibility_off_black_24dp"
            android:drawableStart="@drawable/ic_lock_outline_black_24dp"
            android:inputType="textPassword"
            android:textColor="@color/black" />
    </LinearLayout>

자바 코드

boolean VISIBLE_PASSWORD = false;  //declare as global variable befor onCreate() 
loginPassword = (EditText)findViewById(R.id.loginPassword);
loginPassword.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            final int DRAWABLE_LEFT = 0;
            final int DRAWABLE_TOP = 1;
            final int DRAWABLE_RIGHT = 2;
            final int DRAWABLE_BOTTOM = 3;

            if (event.getAction() == MotionEvent.ACTION_UP) {
                if (event.getRawX() >= (loginPassword.getRight() - loginPassword.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                    // your action here
                    //Helper.toast(LoginActivity.this, "Toggle visibility");
                    if (VISIBLE_PASSWORD) {
                        VISIBLE_PASSWORD = false;
                        loginPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                        loginPassword.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_outline_black_24dp, 0, R.drawable.ic_visibility_off_black_24dp, 0);
                    } else {
                        VISIBLE_PASSWORD = true;
                        loginPassword.setInputType(InputType.TYPE_CLASS_TEXT);
                        loginPassword.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_outline_black_24dp, 0, R.drawable.ic_visibility_black_24dp, 0);
                    }
                    return false;
                }
            }
            return false;
        }
    });

1

이 소스 에 따르면 프로젝트를 AndroidX로 마이그레이션 한 경우 교체 할 수 있습니다

compile "com.android.support:design:24.2.0"

implementation "com.google.android.material:material:1.0.0"

그런 다음 아래 코드를 레이아웃 파일에 넣으면됩니다.

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:passwordToggleEnabled="true"
    android:hint="@string/hint_text">

  <com.google.android.material.textfield.TextInputEditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</com.google.android.material.textfield.TextInputLayout>

재료에 대한 자세한 내용은 TextInputLayout찾을 수 있습니다 여기에 .

이 소스 로 Android 지원 라이브러리에서 AndroidX로 마이그레이션하는 것이 좋습니다.

AndroidX는 Android 팀이 Jetpack 내에서 라이브러리를 개발, 테스트, 패키지, 버전 및 릴리스하는 데 사용하는 오픈 소스 프로젝트입니다.

AndroidX는 원래 Android 지원 라이브러리를 대폭 개선했습니다. 지원 라이브러리와 마찬가지로 AndroidX는 Android OS와 별도로 제공되며 Android 릴리스에서 이전 버전과의 호환성을 제공합니다. AndroidX는 기능 패리티 및 새 라이브러리를 제공하여 지원 라이브러리를 완전히 대체합니다. 또한 AndroidX에는 다음 기능이 포함되어 있습니다.

AndroidX의 모든 패키지는 문자열 androidx로 시작하는 일관된 네임 스페이스에 있습니다. 지원 라이브러리 패키지는 해당 androidx. * 패키지에 매핑되었습니다. 모든 이전 클래스와 빌드 아티팩트를 새 클래스로 완전히 맵핑하려면 패키지 리팩토링 페이지를 참조하십시오.

지원 라이브러리와 달리 AndroidX 패키지는 별도로 유지 관리 및 업데이트됩니다. androidx 패키지는 버전 1.0.0부터 엄격한 의미 버전 관리를 사용합니다. 프로젝트에서 AndroidX 라이브러리를 독립적으로 업데이트 할 수 있습니다.

모든 새로운 지원 라이브러리 개발은 AndroidX 라이브러리에서 이루어집니다. 여기에는 원래 지원 라이브러리 아티팩트 유지 관리 및 새로운 Jetpack 구성 요소 소개가 포함됩니다.


1

처음에는 이미지 벡터 자산 가시성으로로드 된 화면입니다 여기에 이미지 설명을 입력하십시오

클릭하면이 이미지 가시성으로 변경됩니다. 여기에 이미지 설명을 입력하십시오

위의 비밀번호 스위치 코드 (xml 코드)

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/laypass"
    android:layout_width="330dp"
    android:layout_height="50dp"
    android:layout_marginTop="24dp"
    app:layout_constraintEnd_toEndOf="@+id/editText3"
    app:layout_constraintStart_toStartOf="@+id/editText3"
    app:layout_constraintTop_toBottomOf="@+id/editText3">

    <EditText
        android:id="@+id/edit_password"
        style="@style/EditTextTheme"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/round"
        android:drawableLeft="@drawable/ic_password"
        android:drawablePadding="10dp"
        android:ems="10"
        android:hint="Password"
        android:inputType="textPassword"
        android:paddingLeft="10dp"
        android:paddingRight="15dp"
        android:textColor="@color/cyan92a6"
        android:textColorHint="@color/cyan92a6"
        android:textCursorDrawable="@null"
        android:textSize="18sp"
        />

    <ImageView
        android:id="@+id/show_pass_btn"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:alpha=".5"
        android:onClick="ShowHidePass"
        android:padding="5dp"
        android:src="@drawable/ic_visibility"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/laypass"
        app:layout_constraintTop_toTopOf="@+id/edit_password" /> 
 </androidx.constraintlayout.widget.ConstraintLayout>

버튼 조작을위한 Java 코드

public void ShowHidePass(View view) {

    if(view.getId()==R.id.show_pass_btn){
        if(edit_password.getTransformationMethod().equals(PasswordTransformationMethod.getInstance())){
            ((ImageView)(view)).setImageResource(R.drawable.ic_visibility_off);
            //Show Password
            edit_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        }
        else{
            ((ImageView)(view)).setImageResource(R.drawable.ic_visibility);
            //Hide Password
            edit_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
        }
    }
}

0

XML에서 이렇게

    <LinearLayout
          android:layout_height="wrap_content"
          android:layout_width="fill_parent"
          android:orientation="vertical"
          >
          <RelativeLayout
              android:id="@+id/REFReLayTellFriend"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal"
              >
          <EditText
              android:id="@+id/etpass1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:background="@android:color/transparent"
              android:bottomLeftRadius="10dp"
              android:bottomRightRadius="50dp"
              android:fontFamily="@font/frutiger"
              android:gravity="start"
              android:inputType="textPassword"
              android:hint="@string/regpass_pass1"
              android:padding="20dp"
              android:paddingBottom="10dp"
              android:textColor="#000000"
              android:textColorHint="#d3d3d3"
              android:textSize="14sp"
              android:topLeftRadius="10dp"
              android:topRightRadius="10dp"/>
              <ImageButton
                  android:id="@+id/imgshowhide1"
                  android:layout_width="40dp"
                  android:layout_height="20dp"
                  android:layout_marginTop="20dp"
                  android:layout_marginRight="10dp"
                  android:background="@drawable/showpass"
                  android:layout_alignRight="@+id/etpass1"/>
          </RelativeLayout>    

 boolean show=true;
 //on image click inside password do this
 if(show){
                imgshowhide2.setBackgroundResource(0);
                imgshowhide2.setBackgroundResource(R.drawable.hide);
                etpass2.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                etpass2.setSelection(etpass2.getText().length());

                show=false;
            }else{
                imgshowhide2.setBackgroundResource(0);
                imgshowhide2.setBackgroundResource(R.drawable.showpass);
                //etpass1.setInputType(InputType.TYPE_TEXT);
                etpass2.setInputType(InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
                etpass2.setSelection(etpass2.getText().length());
                show=true;
            }

0

나의 Kotlin 확장. 어디에서나 한 번 사용하십시오

fun EditText.tooglePassWord() {
this.tag = !((this.tag ?: false) as Boolean)
this.inputType = if (this.tag as Boolean)
    InputType.TYPE_TEXT_VARIATION_PASSWORD
else
    (InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD)

this.setSelection(this.length()) }

이 방법을 모든 파일에 보관하고 어디서나 사용할 수 있습니다.

ivShowPassword.click { etPassword.tooglePassWord() }

여기서 ivShowPassword는 이미지 뷰 (눈)를 클릭하고 etPassword는 Editext입니다


0

좋은 해결책입니다. 버튼을 설정 한 후 다음 코드를 사용하십시오.

public void showPassword(View v)
{

    TextView showHideBtnText = (TextView) findViewById(R.id.textView1);

    if(showHideBtnText.getText().toString().equals("Show Password")){
        password.setTransformationMethod(null);
        showHideBtnText.setText("Hide");
    } else{
        password.setTransformationMethod(new PasswordTransformationMethod());
        showHideBtnText.setText("Show Password");
    }


}

0

이 방법을 추가하십시오 :

fun EditText.revertTransformation() {
    transformationMethod = when(transformationMethod) {
        is PasswordTransformationMethod -> SingleLineTransformationMethod.getInstance()
        else -> PasswordTransformationMethod.getInstance()
    }
}

입력 유형 상태를 전환합니다 (단일 라인 변환을 원하는대로 변경할 수 있음). 사용 예 :

editText.revertTransformation()

0
1> Make a selector file "show_password_selector.xml".

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/pwd_hide"
        android:state_selected="true"/>
    <item android:drawable="@drawable/pwd_show"
        android:state_selected="false" />
</selector>

2>set "show_password_selector" file into imageview.

<ImageView
                        android:id="@+id/iv_pwd"
                        android:layout_width="@dimen/_35sdp"
                        android:layout_height="@dimen/_25sdp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="@dimen/_15sdp"
                        android:src="@drawable/show_password_selector" />

3> put below code in java file.
  iv_new_pwd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (iv_new_pwd.isSelected()) {
                iv_new_pwd.setSelected(false);
                Log.d("mytag", "in case 1");
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT);
            } else {
                Log.d("mytag", "in case 1");
                iv_new_pwd.setSelected(true);
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }
        }
    });

0
1> Make a selector file "show_password_selector.xml".

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/pwd_hide"
        android:state_selected="true"/>
    <item android:drawable="@drawable/pwd_show"
        android:state_selected="false" />
</selector>

2>set "show_password_selector" file into imageview.

<ImageView
                        android:id="@+id/iv_pwd"
                        android:layout_width="@dimen/_35sdp"
                        android:layout_height="@dimen/_25sdp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="@dimen/_15sdp"
                        android:src="@drawable/show_password_selector" />

3> put below code in java file.
  iv_new_pwd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (iv_new_pwd.isSelected()) {
                iv_new_pwd.setSelected(false);
                Log.d("mytag", "in case 1");
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT);
            } else {
                Log.d("mytag", "in case 1");
                iv_new_pwd.setSelected(true);
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }
        }
    });

-2
if (inputPassword.getTransformationMethod() == PasswordTransformationMethod.getInstance()) {
 //password is visible
                inputPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            }
else if(inputPassword.getTransformationMethod() == HideReturnsTransformationMethod.getInstance()) {
 //password is hidden
                inputPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
            }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.