如何在键入时隐藏密码的字母

时间:2012-11-07 10:42:12

标签: android

我正在使用Android处理应用程序。我的要求是在用户输入密码时隐藏密码。我知道如何隐藏密码,但用户输入的密码在转换为不可读的格式之前会显示一段时间。任何人都可以帮助我。

7 个答案:

答案 0 :(得分:8)

实现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));
        }
    }
}
}

答案 1 :(得分:4)

请勿将默认编辑文字属性设置为密码。相反,您可以使用addTextChangedListener(),一旦用户输入字符,就会调用它。保持活动级别字符串说“mPass”。在TextWatcher()onTextChanged方法中,将字符附加到mPass并将输入字符替换为*。

但是你必须要小心这个coz应用程序将控制传递给TextWatcher(),即使你用*替换了字符。如果处理不当,将以递归方式调用它,导致应用程序崩溃。

乏味的方式,但它会起作用......

答案 2 :(得分:0)

在android中有TextView的属性:

  

android:密码是否   字段的字符显示为密码点而不是   自己。

http://developer.android.com/reference/android/widget/TextView.html#attr_android:password

答案 3 :(得分:0)

更容易将其添加到xml文件中:

android:inputType="textPassword"

示例:

<android.support.v7.widget.AppCompatEditText
                android:id="@+id/password_edit_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:singleLine="true" />

答案 4 :(得分:0)

如果您希望在键入时仅显示最后一个字符或第一个字符(如果字符序列长度== 1)(不屏蔽)。

public class LoginActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // example of usage
    ((TextView) findViewById(R.id.password)).setTransformationMethod(new AsteriskPasswordTransformationMethod());
}
public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return new PasswordCharSequence(source);
    }

    private static class PasswordCharSequence implements CharSequence {
        private CharSequence mSource;
        public PasswordCharSequence(CharSequence source) {
            mSource = source; // Store char sequence
        }
        public char charAt(int index) {
            // Only the last character or the first character if length == 1 is visible to the user
            return (mSource.length() == index + 1) ? mSource.charAt(index) : '*'; 
        }
        public int length() {
            return mSource.length(); // Return default
        }
        @NotNull
        public CharSequence subSequence(int start, int end) {
            return mSource.subSequence(start, end); // Return default
        }
    }
}
}

答案 5 :(得分:-1)

设置android:password="true"。它会做你期望的。

示例:

   <EditText 
            android:id="@+id/editText1"
            android:inputType="number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:password="true" />

答案 6 :(得分:-1)

只需进入一般性,安全性,然后滚动直至找到“使密码可见”(在键入时短暂显示密码字符)这将停止短时间内出现的字母并减少某人的机会在您输入密码时读取密码,保持安全,保持快乐=)