安卓数字密码字段

39

我有一个EditText字段,需要是数字密码字段。在竖屏模式下一切正常;但在横屏模式下不行。当用户选择EditText字段时,UI会放大到该字段,当我输入时所有字符都可见。

我还需要一个数字键盘。我尝试将输入类型设置为文本密码|数字。如果我删除"number"选项,则一切正常;否则不行。

有什么建议吗?


请查看答案:https://dev59.com/M2_Xa4cB1Zd3GeqPzk95 - Mohammed Akdim
8个回答

61

不需要使用已弃用的 android:password ,可以解决此问题。请使用以下代码片段,但请不要更改调用序列:

    EditText editText = (EditText) findViewById(R.id.MyEditText);
    editText.setInputType(InputType.TYPE_CLASS_NUMBER);
    editText.setTransformationMethod(PasswordTransformationMethod.getInstance());

1
当然,但某种程度上不如简单的android:password="true"清晰。我想知道为什么他们把它弃用了。 - ettore
5
在2.3.x版本上似乎这个方法不起作用。按照Mar的描述,转为横屏时密码仍然可见。 - Marcus Wolschon
我刚刚发现在 editText.setTransformationMethod() 之后使用 editText.setSingleLine(true); 会导致点号不再显示!! - Someone Somewhere

18

我发现用 android:inputType="numberPassword" 可以轻松地隐藏数字文本输入(密码样式)。

这是完整的适用于我的示例:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyLargeTextBox"
    android:background="@android:drawable/editbox_background_normal"
    android:id="@+id/txtWebServicePIN"
    android:layout_row="3"
    android:layout_column="2"
    android:layout_columnSpan="2"
    android:minWidth="100dp"
    android:maxWidth="100dp"
    android:inputType="numberPassword"
    android:maxLength="6"/>

numberKeyboard不会弹出“仅数字”软键盘。 - Srujan Barai

6

为了解决在横屏模式下全屏编辑器中密码可见的问题(如Marcus所描述),您可以添加以下行以禁用全屏编辑器:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

你可能也想将字体更改为等宽字体,以更好地模拟文本密码行为:
editText.setTypeface(Typeface.MONOSPACE);

虽然在小设备上看起来不太好,但这绝对是隐藏密码的一种方法。 - Trinimon

3

使用已经过时的方法

android:password="true"

可能可以解决您的问题。


实际上,我正要链接到您之前的答案:https://dev59.com/_HI-5IYBdhLWcg3wF0Qc#2017791 - Christopher Orr

1

在XML中尝试此操作,清单文件不会发生任何变化。

<EditText
         android:id="@+id/etPassword"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:inputType="textPassword"
         android:singleLine="true" />

这如何限制仅接受数字输入? - Steji

0

如何制作带有提示的输入密码,而不会被转换为*!!。

在XML中:

android:inputType="textPassword"
android:gravity="center"
android:ellipsize="start"
android:hint="Input Password !."

感谢mango和rjrjr的见解:D。

0

试试这个:

EditText input = (EditText) findViewById(R.id.input);
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

更多信息在这里


-2

我认为你应该使用android:password="true"android:numeric="integer"。但正如Android文档所述(在R.attr.html中,而不是TextView文档中),这些已经过时了,你应该使用android:inputType。inputType接受标志,因此你可以混合多种可能性。我认为android:inputType="number | password"对你有用。

如果你想支持旧设备,你应该指定android:password="true"


请参考dtmilano的回答,以及我提供的链接,该链接涵盖了这些要点。不幸的是,将两者都传递到“inputType”中是行不通的。 - Christopher Orr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接