在Android中,我创建了一个密码字段:
EditText text = new EditText(context);
text.setTransformationMethod(PasswordTransformationMethod.getInstance());
或者像这样,这似乎做同样的事情:
EditText text = new EditText(context);
text.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
我得到一个不错的密码字段,除了用户输入的最后一个字符。它在屏幕上可见几秒钟,然后被一个点掩盖。
以下是截图:
你知道如何解决这个问题吗?
答案 0 :(得分:10)
这是预期的行为。使用大多数设备上的软键盘,正确输入密码是有价值的反馈。
有关您可以指定的所有不同inputType的列表以及它们如何更改EditText,
此外,可以通过实施自己的TransformationMethod
并通过setTransformationMethod()
进行设置来更改此行为,但我不建议这样做。用户会期望您看到的行为,通过更改您的应用,您将提供不一致的用户体验。
还要检查此android article
答案 1 :(得分:9)
实现TransformationMethod以隐藏输入密码的最后一个字符:
public class LoginActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// example of usage
((TextView) findViewById(R.id.password)).setTransformationMethod(new HiddenPassTransformationMethod());
}
private class HiddenPassTransformationMethod implements TransformationMethod {
private char DOT = '\u2022';
@Override
public CharSequence getTransformation(final CharSequence charSequence, final View view) {
return new PassCharSequence(charSequence);
}
@Override
public void onFocusChanged(final View view, final CharSequence charSequence, final boolean b, final int i,
final Rect rect) {
//nothing to do here
}
private class PassCharSequence implements CharSequence {
private final CharSequence charSequence;
public PassCharSequence(final CharSequence charSequence) {
this.charSequence = charSequence;
}
@Override
public char charAt(final int index) {
return DOT;
}
@Override
public int length() {
return charSequence.length();
}
@Override
public CharSequence subSequence(final int start, final int end) {
return new PassCharSequence(charSequence.subSequence(start, end));
}
}
}
}
答案 2 :(得分:1)
在需要实现pin-code类型的用户界面后,我遇到了这个问题。在用户输入1个数字(EditTexts和PIN号码之间的1:1关系,总共4个EditTexts)之后,密码将保持“打开”状态。我的解决方案是实现一个TextTatcher,用输入项目代替输入。(/)。