将EditText密码掩码字符更改为星号(*)

Sun*_*nny 40 android android-edittext

有没有办法将密码文本从点(.)更改为星号(*).

密码正在edittext中输入.

<EditText
        android:id="@+id/passWord1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:inputType="number"
        android:password="true"/>
Run Code Online (Sandbox Code Playgroud)

Naj*_*ala 61

在xml文件中插入edittext,

<EditText
    android:id="@+id/passWordEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:inputType="textPassword"/>
Run Code Online (Sandbox Code Playgroud)

你的类文件继续从edittext获取findViewById并为此实现,

EditText edittext = (EditText)findViewById(R.id.passWordEditText);
edittext.setTransformationMethod(new AsteriskPasswordTransformationMethod());
Run Code Online (Sandbox Code Playgroud)

这个类的实现,

public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return new PasswordCharSequence(source);
    }

    private class PasswordCharSequence implements CharSequence {
        private CharSequence mSource;
        public PasswordCharSequence(CharSequence source) {
            mSource = source; // Store char sequence
        }
        public char charAt(int index) {
            return '*'; // This is the important part
        }
        public int length() {
            return mSource.length(); // Return default
        }
        public CharSequence subSequence(int start, int end) {
            return mSource.subSequence(start, end); // Return default
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这对我有用.我的情况,我必须隐藏最后10个数字,而不是全部.所以,我只需要覆盖方法charAt(int index),如果index> 9则返回'*',否则返回mSource.charAt(index). (2认同)

Ram*_*ran 19

<EditText
        android:id="@+id/passWord1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:inputType="textPassword"//here is the change. check it once in your xml
        android:password="true"/>
Run Code Online (Sandbox Code Playgroud)

在eclipse中,当你移动光标时单击Ctrl+ Space时会有提示android:inputType.然后你可以看到选项列表.在那里你可以选择textPassword

如果你想看到*代替.那么检查这个Android: Asterisk Password Field


Sun*_*nny 8

得到了Ram kiran发布的链接的帮助

text.setTransformationMethod(new AsteriskPasswordTransformationMethod());


public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
@Override
public CharSequence getTransformation(CharSequence source, View view) {
    return new PasswordCharSequence(source);
}

private class PasswordCharSequence implements CharSequence {
    private CharSequence mSource;
    public PasswordCharSequence(CharSequence source) {
        mSource = source; // Store char sequence
    }
    public char charAt(int index) {
        return '*'; // This is the important part
    }
    public int length() {
        return mSource.length(); // Return default
    }
    public CharSequence subSequence(int start, int end) {
        return mSource.subSequence(start, end); // Return default
    }
}
};
Run Code Online (Sandbox Code Playgroud)


小智 5

科特林

class AsteriskPasswordTransformationMethod : PasswordTransformationMethod() {

    override fun getTransformation(source: CharSequence, view: View): CharSequence {
        return PasswordCharSequence(source)
    }

    inner class PasswordCharSequence (private val source: CharSequence) : CharSequence {

        override val length: Int
            get() = source.length

        override fun get(index: Int): Char = '*'

        override fun subSequence(startIndex: Int, endIndex: Int): CharSequence {
            return source.subSequence(startIndex, endIndex)
        }
        
    }
    
}
Run Code Online (Sandbox Code Playgroud)