如何在隐藏和查看密码之间切换

时间:2010-09-10 15:11:26

标签: android passwords

是否有一种聪明的方法让用户在Android EditText中隐藏和查看密码之间切换? 许多基于PC的应用程序允许用户执行此操作。

36 个答案:

答案 0 :(得分:238)

自支持库v24.2.0以来,实现起来非常容易。

您需要做的只是:

  1. 将设计库添加到您的家属

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
    
  2. TextInputEditTextTextInputLayout

    结合使用
    <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>
    
  3. passwordToggleEnabled属性可以胜任!

    1. 在您的根布局中,不要忘记添加xmlns:app="http://schemas.android.com/apk/res-auto"

    2. 您可以使用以下方式自定义密码切换:

    3. app:passwordToggleDrawable - 可绘制用作密码输入可见性切换图标 app:passwordToggleTint - 用于密码输入可见性切换的图标 app:passwordToggleTintMode - 用于应用背景色调的混合模式。

      TextInputLayout documentation中的更多详情。

      enter image description here

答案 1 :(得分:125)

您可以动态更改TextView的属性。如果要将XML Atrribute android:password设置为true,则如果将其设置为false,则视图将显示点,显示文本。

使用方法setTransformationMethod,您应该能够从代码中更改此属性。 (免责声明:我没有测试该方法在显示视图后是否仍然有效。如果您遇到问题,请留下评论让我知道。)

完整的示例代码是

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

隐藏密码。要显示密码,您可以设置一个现有的转换方法,或者实现一个对输入文本不起作用的空TransformationMethod

yourTextView.setTransformationMethod(new DoNothingTransformation());

答案 2 :(得分:100)

要显示点而不是密码,请设置PasswordTransformationMethod:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

当然,您可以使用

在xml布局的edittext元素中默认设置此项
android:password

要重新显示可读密码,只需将null作为转换方法传递:

yourEditText.setTransformationMethod(null);

答案 3 :(得分:73)

显示:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

隐藏:

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

在每个光标重置后,所以:

editText.setSelection(editText.length());

答案 4 :(得分:26)

您可以使用 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">

答案 5 :(得分:11)

使用复选框并相应地更改输入类型。

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);
    }
}

答案 6 :(得分:10)

我遇到了同样的问题,很容易实现。

所有您需要做的就是将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>

答案 7 :(得分:7)

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;
}

答案 8 :(得分: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());
                }

            }
        });

答案 9 :(得分:6)

首先,这是一个装有图像矢量资产可见性的屏幕 enter image description here

在单击时它将更改为该图像可见性 enter image description here

上述密码开关的代码(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());
        }
    }
}

答案 10 :(得分: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"
            }
        }
    } );
    ...

答案 11 :(得分:5)

我觉得我想回答这个问题,即使有一些好的答案,

根据文档 TransformationMethod 执行我们的使命

  

TransformationMethod

     

TextView使用TransformationMethods来做替换   带点的密码字符,或保留换行符   在单行文本字段中导致换行符。

注意我使用黄油刀,但如果用户检查显示密码

则相同
@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());
    }

答案 12 :(得分: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());

        }
    });
}

答案 13 :(得分:3)

您可以使用以下代码显示/隐藏密码:

XML CODE:

<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" />

JAVA代码:

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());
        }
    }
});

答案 14 :(得分:2)

在github上尝试https://github.com/maksim88/PasswordEditText项目。 您甚至不需要使用它来更改Java代码。只是改变

的EditText

标记为

com.maksim88.passwordedittext.PasswordEditText

在您的XML文件中。

答案 15 :(得分:2)

你尝试过setTransformationMethod吗?它继承自TextView,并希望将TransformationMethod作为参数。

您可以找到有关TransformationMethods here的更多信息。

它还有一些很酷的功能,比如角色替换。

答案 16 :(得分:2)

使用复选框显示和隐藏密码Edit_Text

XML

result=0
passcount=0
for layer in %project.layers%; do
   //     some stuff...
 result=$?
 if [[ "$result" -ne 0 ]]; then
    break;
 else
    passcount++
    echo " $layer Succeeded"
 fi
done

java代码

<?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>

答案 17 :(得分:1)

我使用了一个 OnClickListener(),它与我想用作工具的按钮相关联。

private EditText email_et, contraseña_et;
protected void onCreate(Bundle savedInstanceState) {
....
contraseña_et = (EditText) findViewById(R.id.contraseña_et);
....
vercontra_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int inputType = contraseña_et.getInputType();
            if (inputType == 129){
                contraseña_et.setInputType(1);
            } else {
                contraseña_et.setInputType(129);
            }
            contraseña_et.setSelection(contraseña_et.getText().length());
        }
    });

阅读文档,int 值似乎不同,所以我进行了调试以找到正确的值,它工作得很棒,而且通过这种方式更容易一些。

[Contraseña 是西班牙语密码,顺便说一句]

答案 18 :(得分:1)

您必须询问当前文本是否已经用圆点显示,使用函数PasswordTransformationMethod.getInstance()可以做到这一点。

这是我在科特林的乐趣:

        fun hideAndShowPassword(editText: EditText, indicator: ImageView) {

        if (editText.transformationMethod == PasswordTransformationMethod.getInstance()) {
            editText.transformationMethod = HideReturnsTransformationMethod.getInstance()
            indicator.setImageDrawable(
                ContextCompat.getDrawable(
                    editText.context,
                    R.drawable.eye
                )
            )
            indicator.imageTintList =
                ContextCompat.getColorStateList(editText.context, R.color.colorTintIcons)
        } else {
            editText.transformationMethod = PasswordTransformationMethod.getInstance()
            indicator.setImageDrawable(
                ContextCompat.getDrawable(
                    editText.context,
                    R.drawable.eye_off
                )
            )
            indicator.imageTintList =
                ContextCompat.getColorStateList(editText.context, R.color.colorTintIcons)
        }

        editText.setSelection(editText.text.length)
    }

答案 19 :(得分:1)

1-创建选择器文件“ 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-将“ show_password_selector”文件保存到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-在Java文件中放置以下代码。

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);
        }
    }
});

答案 20 :(得分:1)

这是我的解决方案,不使用TextInputEditText和Transformation方法。

<强> XML

call "%VSAPPIDDIR%..\Tools\vsdevcmd\ext\vcvars.bat"

Java代码

<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>

答案 21 :(得分:1)

我做的是

  1. 创建编辑文本视图和普通文本视图
  2. 使用约束布局(就像Facebook应用登录屏幕一样)使它们相互重叠
  3. 将onClickListener附加到普通文本视图,以便相应地更改编辑文本视图的输入类型(可见/不可见)
  4. 您可以查看此视频,了解更详细的步骤和解释https://youtu.be/md3eVaRzdIM

    希望有所帮助:)

答案 22 :(得分: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上单击了imageview(眼睛),在etPassword上单击了Editext

答案 23 :(得分:0)

根据this source,如果您已将项目迁移到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的更多信息,请参见here

To this source,建议从Android支持库迁移到AndroidX:

  

AndroidX是Android团队用来执行以下任务的开源项目   在Jetpack中开发,测试,打包,版本和发行库。

     

AndroidX是对原始Android支持的重大改进   图书馆。与支持库一样,AndroidX与   Android操作系统,并提供跨Android的向后兼容性   发布。 AndroidX通过提供以下功能完全替代了支持库   功能奇偶校验和新库。此外,AndroidX还包括   具有以下功能:

     

AndroidX中的所有软件包都以一个统一的命名空间存在,从   字符串androidx。支持库软件包已映射   放入相应的androidx。*包中。对于所有的完整映射   旧类并为新类构建构件,请参见Package   重构页面。

     

与支持库不同,AndroidX软件包是单独   维护和更新。 androidx软件包使用严格的语义   从版本1.0.0开始的版本控制。您可以更新AndroidX   库在您的项目中独立存在。

     

所有新的支持库开发都将在AndroidX中进行   图书馆。这包括原始支持库的维护   工件和新的Jetpack组件的介绍。

答案 24 :(得分: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");
    }


}

答案 25 :(得分:0)

尝试一下:

首先将标志定义为全局标志,如下所示:

private boolean isShowPassword = false;

并设置侦听器以处理在显示和隐藏密码按钮上的点击:

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;
                }
            }
        });

答案 26 :(得分:0)

非常简单的形式:

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

希望有帮助。

答案 27 :(得分: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;
            }

答案 28 :(得分:0)

编译'com.android.support:appcompat-v7:24.2.0'

编译'com.android.support:design:24.2.0'

布局

    android:inputType="textPassword"

正在运作

答案 29 :(得分:0)

添加此方法:

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

调用它将在输入类型状态之间切换(您可以将“单行”转换更改为您喜欢的)。用法示例:

editText.revertTransformation()

答案 30 :(得分:0)

尝试一下:

passwordEditText.setInputType(1);

passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT);

答案 31 :(得分:0)

使用下面的代码

    val hidePasswordMethod = PasswordTransformationMethod()
    showOrHidePasswordButton.setOnClickListener {
        passwordEditText.apply {
            transformationMethod =
                if (transformationMethod is PasswordTransformationMethod) 
                   null //shows password
               else 
                   hidePasswordMethod //hides password
        }
    }

并确保将其添加到布局中的密码编辑文本

    android:inputType="textPassword"

答案 32 :(得分:0)

如果您想要一个简单的解决方案,您可以使用这个 Android 的 EditText 扩展程序,请转到此链接了解更多信息:https://github.com/scottyab/showhidepasswordedittext

将此添加到您的 build.gradle: 实现 'com.github.scottyab:showhidepasswordedittext:0.8'

然后在 XML 文件中更改 EditText。

来自:

收件人:

仅此而已。

注意:您在 XML Design 中看不到它,请尝试在您的模拟器或物理设备中运行它。

答案 33 :(得分:0)

input_layout.isPasswordVisibilityToggleEnabled = true 似乎已被弃用。就我而言,我在 Kotlin 中就是这样做的:

input_edit_text.inputType = TYPE_CLASS_TEXT or TYPE_TEXT_VARIATION_PASSWORD
input_layout.endIconMode = END_ICON_PASSWORD_TOGGLE

其中 input_edit_text 是 com.google.android.material.textfield.TextInputEditText,input_layout 是 com.google.android.material.textfield.TextInputLayout。当然你也应该导入这些:

import android.text.InputType.TYPE_CLASS_TEXT
import android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD
import com.google.android.material.textfield.TextInputLayout.END_ICON_PASSWORD_TOGGLE

我可以使用提供的方法自定义图标,如下所示:

 input_layout.endIconDrawable = ...
 input_layout.setEndIconOnClickListener {  }
 input_layout.setEndIconOnLongClickListener(...)

答案 34 :(得分:-1)

只需在 Xml 文件中创建一个复选框

然后简单的用java代码写这个函数

checkbox = findViewById(R.id.checkbox);
        checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){

                if (isChecked) {
                    password.setTransformationMethod(null);
                }
                else{
                    password.setTransformationMethod(new PasswordTransformationMethod());
                }
            }

        });

答案 35 :(得分:-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());
            }