【问题标题】:Android: How to set password property in an edit text?Android:如何在编辑文本中设置密码属性?
【发布时间】:2011-05-23 08:56:03
【问题描述】:

我需要在我的 android 应用程序中创建一个包含“用户名”“密码”字段和“登录”和“取消”两个按钮的登录表单。

我正在使用一个带有 edittext 的警报对话框。

这是我用来创建密码编辑文本的代码..

     final EditText Password = new EditText(this);
     Password.setGravity(Gravity.CENTER);
     Password.setHint("Password");
     Password.setWidth(200);

     Password.setTransformationMethod(new PasswordTransformationMethod());
     login_alert.addView(Password);

我的问题是,当我打开软键盘来编辑密码时,显示的是纯文本而不是“点”。 (不处于软键盘模式时显示为点)

谁能提出解决方案?

【问题讨论】:

  • 您的会员命名风格会给您带来麻烦。如果Password 是一个真实存在的类怎么办,上帝要小心使用静态方法的类。
  • 我尝试重命名..仍然没有运气
  • 我明白了.. 非常感谢.. :)

标签: android android-edittext


【解决方案1】:

已弃用

在 EditText 的 xml 中包含这个属性:android:password="true"

编辑

android:inputType="textPassword"

【讨论】:

  • android:password="true" 已弃用
【解决方案2】:

要在 EditText 中设置密码,我们必须在 xml 文件中设置一个“inputType”属性。如果我们只使用 EditText,那么我们将在 EditText 中设置输入类型,如下面的代码所示。

                    <EditText
                    android:id="@+id/password_Edit"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:hint="password"
                    android:imeOptions="actionNext"
                    android:inputType="textPassword"
                    android:maxLength="100"
                    android:nextFocusDown="@+id/next"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />

密码启用属性为

 android:inputType="textPassword"

但是,如果我们使用 Material Design(带有设计支持库)实现 Password EditText,那么我们将编写如下代码。

<android.support.design.widget.TextInputLayout
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:id="@+id/txtInput_currentPassword"
                android:layout_width="match_parent"
                app:passwordToggleEnabled="false"
                android:layout_height="wrap_content">

                <EditText
                    android:id="@+id/password_Edit"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:hint="@string/hint_currentpassword"
                    android:imeOptions="actionNext"
                    android:inputType="textPassword"
                    android:maxLength="100"
                    android:nextFocusDown="@+id/next"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </android.support.design.widget.TextInputLayout>

@注意: - 在 Android SDK 24 及更高版本中,“passwordToggleEnabled”默认为 true。因此,如果我们在密码 EditText 中对显示/隐藏功能进行了海关处理,那么我们必须在上面给出的代码中将其设置为 false。

app:passwordToggleEnabled="true"

要添加上面的行,我们必须在根布局中添加下面的行。

xmlns:app="http://schemas.android.com/apk/res-auto"

【讨论】:

    【解决方案3】:
    Password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    

    这个对我有用。
    但是你必须看看 Octavian Damiean 的评论,他是对的。

    【讨论】:

    • 非常感谢 ernazm.. 这个工作正常。我有更多的qn ..我的“Password.setHint("Password");"现在似乎不起作用。有什么想法吗?
    • 奇怪。刚刚尝试将setHintsetInputType 结合起来,对我来说效果很好。这是我的代码:EditText Password = ((EditText) findViewById(R.id.editText1)); Password.setHint("Password"); Password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    • Here 解释了为什么同时需要TYPE_CLASS_TEXTTYPE_TEXT_VARIATION_PASSWORD
    • 如果是 Kotlin,你应该写“password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD”
    【解决方案4】:

    这是一种在密码中添加点的新方法

    <EditText
        android:id="@+id/loginPassword"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="@string/pwprompt" /
    

    添加 android:inputType = "textPassword"

    【讨论】:

    【解决方案5】:

    我对 Visual Studio 2015/Xamarin 的类似解决方案的搜索将我带到了这个线程。虽然将 EditText.InputType 设置为 Android.Text.InputTypes.TextVariationVisiblePassword 在用户输入期间正确隐藏了密码,但如果在呈现 EditText 布局之前(在用户提交密码输入之前)可见,它不会“隐藏”密码。为了在用户提交密码并呈现 EditText 布局后隐藏可见密码,我按照 LuxuryMode 的建议使用了EditText.TransformationMethod = PasswordTransformationMethod.Instance

    【讨论】:

      【解决方案6】:

      您需要使用PasswordTransformationMethod.getInstance() 而不是new PasswordTransformationMethod()

      【讨论】:

        【解决方案7】:

        我在执行此操作时发现,为了将重心设置为中心,并且在 using inputType 时仍显示密码提示,android:gravity="Center" 必须位于 XML 行的末尾。

        <EditText android:textColor="#000000" android:id="@+id/editText2" 
            android:layout_width="fill_parent" android:hint="Password" 
            android:background="@drawable/rounded_corner" 
            android:layout_height="fill_parent" 
            android:nextFocusDown="@+id/imageButton1" 
            android:nextFocusRight="@+id/imageButton1" 
            android:nextFocusLeft="@+id/editText1"
            android:nextFocusUp="@+id/editText1" 
            android:inputType="textVisiblePassword" 
            android:textColorHint="#999999" 
            android:textSize="16dp" 
            android:gravity="center">
        </EditText>
        

        【讨论】:

          【解决方案8】:

          使用代码(不是 XML)对我有用的唯一方法是:

          etPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
          etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
          

          【讨论】:

            【解决方案9】:

            查看此链接 text view android:password

            这也适用于EditText,因为它是TextView 的已知直接子类。

            【讨论】:

            • @PareshMayani,对不起,我的朋友,但 EditText 是 TextView 的子类。现在,请停止“-1”-ing 所有你不知道或你认为是错误的事情
            • @PareshMayani 和评论是什么?如果您觉得我的答案不简单,不妨改进一下我的答案
            猜你喜欢
            • 2014-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-07
            相关资源
            最近更新 更多