使用手机号输入时如何将EditText设置为密码(Android)?

26

如何获得既可以输入电话号码又能隐藏字符串的EditText。我知道

android:inputType="textPassword"

隐藏了字符串,

android:inputType="phone"

弹出拨号盘界面。

如何将这两个组合起来?

5个回答

34

android:password已弃用,但据我所知仍是唯一的方法,因为android:inputType="phone|textPassword"会被忽略...

<EditText
    android:id="@+id/EditText01"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:password="true"
    android:inputType="phone" />

啊,有趣。我还没有看到它已经被弃用了。这里是提到 inputType 是正确方式的文档(正如 Roman 所提到的):http://developer.android.com/reference/android/R.attr.html#password - Christopher Orr
1
作为一个小补充,对于那些想从代码中执行此操作的人:editText.setInputType(InputType.TYPE_CLASS_PHONE); editText.setTransformationMethod(PasswordTransformationMethod.getInstance()); - Denis Gladkiy
2
inputType="numberPassword" 可能是最好的选择,但只有在您的应用程序的最小 SDK 版本为 >= 3.0(蜂巢)时才可用。 - k2col

5
我相信这是你想要的吗?
android:inputType="numberPassword"

编辑:在提问时(2010年),这可能不在API中,但对于当代开发来说,它是可用的。


2

我还没有找到一个合适的解决方案。dtmilano的解决方案并不能完全解决问题。如果在横屏模式下焦点在EditText上,你有全屏键盘,那么数字仍然以明文形式显示,而不是掩码。

我花了很多时间去查看实际的TextView代码,这是一个问题的原因是他们明确检查InputType是否与InputType.TYPE_CLASS_TEXT和TYPE_MASK_CLASS相匹配,如果我记得正确的话,范围被TYPE_CLASS_TEXT和TYPE_MASK_CLASS使用的是第一个字节。所以,如果你包含了任何其他在这些边界内的InputType(我认为TYPE_CLASS_TEXT和TYPE_MASK_CLASS使用的范围是第一个字节),那么它就不会被识别为需要掩码的密码。

我知道我说的很混乱。实际的代码更加混乱。说实话,我对TextView的代码感到非常震惊。它是一个纠缠不清的混乱,到处都是硬编码的检查。这种可怕的编码实践导致了像这样的问题。


1

这个问题可以在不使用已弃用的android:password的情况下解决。请查看我的答案这里


你认为android:password是如何工作的? ;) 是的,它是一个已弃用的XML属性,但当该属性出现时,在运行时会执行什么代码呢? - Denis Gladkiy

0

我没有尝试过这个,但是可能可以像这样将两者结合起来:

android:inputType="textPassword|phone"

由于inputType可以具有多个值。


它不起作用。EditText 忽略了 textPassword,只设置为 phone。 - Portablejim
1
对不起,我的回答只是一种没有测试过的猜测。dtmilano的代码片段看起来是正确的方法。 - Roman Nurik

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