7

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

4

7 回答 7

12

输入时隐藏密码字母的 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));
        }
    }
}
}
于 2013-04-24T21:29:03.530 回答
3

不要将默认编辑文本属性设置为密码。相反,您可以使用addTextChangedListener()which 将在用户输入字符后立即被调用。维护一个活动级别字符串,例如“mPass”。在TextWatcher(),onTextChanged方法中,将字符附加到您的 mPass 并用 * 替换输入字符。

但是您必须小心,因为TextWatcher()即使您将字符替换为 *. 如果处理不当,它将被递归调用,导致应用程序崩溃。

乏味的方式,但它会工作......

于 2012-11-07T11:15:57.283 回答
1

一个更简单的原因是将其添加到您的 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" />
于 2018-05-24T06:34:15.023 回答
1

如果您希望在键入时仅显示最后一个字符或第一个字符(如果字符序列长度 == 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
        }
    }
}
}
于 2020-09-23T09:41:49.370 回答
0

android中有TextView的属性:

android:password 字段的字符是否显示为密码点而不是它们本身。

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

于 2012-11-07T10:47:40.693 回答
-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" />
于 2012-11-07T10:47:05.653 回答
-1

只需进入一般,安全性,然后滚动直到找到“使密码可见”(键入密码时简要显示密码字符),这将在短时间内阻止字母出现,并减少有人阅读您的密码的机会当你输入它。

于 2015-06-29T18:47:40.427 回答