【问题标题】:View value of password edittext while a button is pressed按下按钮时查看密码编辑文本的值
【发布时间】:2020-12-24 22:13:44
【问题描述】:

如何查看输入类型为“密码”的edittext 视图的值,当我单击按钮时,当我释放按钮时,文本显示又回到不可读的格式?就像微软在 Windows 8 中单击密码字段旁边的“眼睛”时所做的那样。

谢谢

【问题讨论】:

  • 不管输入类型是什么。只需使用edittext.getText().toString();
  • 我的意思是,我想在edittext视图上显示它

标签: android


【解决方案1】:

我为设计支持库用户找到了最佳解决方案之一:

使用最新的支持库 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>
    

passwordToggleEnabled 属性可以完成这项工作!

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

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

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

更多详情请见TextInputLayout documentation

【讨论】:

    【解决方案2】:
     yourButton.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
    
                   switch ( event.getAction() ) {
                    case MotionEvent.ACTION_DOWN: 
                       editText.setInputType(InputType.TYPE_CLASS_TEXT);
                    break;
                    case MotionEvent.ACTION_UP: 
                        editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                    break;
                    }
                    return true;
            }
        });
    

    【讨论】:

    • 好的。当我触摸按钮时,我能够看到文本,但是当我释放它时,文本不会转换回点(不可读的字符)。我在两种情况下都放置了一个日志,两种情况都正确执行。
    • 尝试将手指放在“眼睛”按钮上,然后将其移至其他位置并松开点击。将显示密码。
    【解决方案3】:

    我喜欢当前的答案!只是为了补充,如果你有一个CheckBox,那么(根据我)使用它的OnCheckedListener 是一个好习惯,如下所示:

    CheckBox box = (CheckBox)findViewById(R.id.dialog_checkBox_showPassword);
    EditText password = (EditText) findViewById(R.id.dialog_editText_password);
    box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
    
                if(checked){
                    password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                }
                else{
                    password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
                }
            }
        });
    

    【讨论】:

      【解决方案4】:

      按下按钮时,设置passwordField.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);。释放按钮时,设置passwordField.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT );

      【讨论】:

        【解决方案5】:

        这对我有用

        dependencies {implementation 'com.google.android.material:material:1.2.1'}
        
        
                        <com.google.android.material.textfield.TextInputLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            app:passwordToggleEnabled="true">
        
                            <com.google.android.material.textfield.TextInputEditText
                                android:id="@+id/et_register_password_confirm"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:ems="10"
                                android:hint="Password"
                                android:inputType="textPassword"/>
                        </com.google.android.material.textfield.TextInputLayout>
        

        【讨论】:

          猜你喜欢
          • 2020-07-22
          • 2018-09-13
          • 2017-05-20
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 2019-05-25
          • 2015-07-21
          • 1970-01-01
          相关资源
          最近更新 更多