48

有什么方法可以将密码文本从 dot(.) 更改为 asterisk(*) 。

密码正在编辑文本中输入。

<EditText
        android:id="@+id/passWord1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:inputType="number"
        android:password="true"/>
4

8 回答 8

77

在您的xml文件中插入edittext,

<EditText
    android:id="@+id/passWordEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:inputType="textPassword"/>

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

EditText edittext = (EditText)findViewById(R.id.passWordEditText);
edittext.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
        }
    }
};

如果您的代码是 Kotlin,那么您必须制作单独的 java 文件,然后您必须将 java 与 kotlin 代码一起使用。

于 2012-12-27T09:36:24.293 回答
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"/>

在 Eclipse 中,当您将光标移动到时单击Ctrl+会有提示。然后你可以看到选项列表。在那里你可以选择Spaceandroid:inputTypetextPassword

如果你想*代替.然后检查这个Android: Asterisk Password Field

于 2012-12-27T09:04:21.460 回答
9

在 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
    }
}
};
于 2016-08-17T05:55:00.743 回答
2
EditText.setTransformationMethod(new PasswordTransformationMethod());
于 2017-11-28T06:22:03.617 回答
2

以 Kotlin 的方式:

类星号密码转换方法:密码转换方法(){

override fun getTransformation(source: CharSequence?, view: View?): CharSequence {
    return super.getTransformation(source, view)
}


 abstract inner class PasswordCharSequence(val source: CharSequence) : CharSequence {
     override val length: Int
         get() = source.length

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

    override fun subSequence(start: Int, end: Int): CharSequence {
        return source.subSequence(start, end) // Return default
    }
}

}`

于 2020-09-29T14:48:49.547 回答
2

科特林

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)
        }
        
    }
    
}
于 2021-03-19T10:42:22.110 回答
0

对于 android:inputType,有一种密码类型。

于 2012-12-27T09:03:17.850 回答
0

试试这个

android:inputType="textPassword"       
于 2012-12-27T09:28:20.023 回答