use*_*103 5 android android-edittext
我正在使用视图输入用户的四位数 PIN。UI 由 4 个编辑文本组成,每个编辑文本的 maxLength 设置为 1。在输入值以编辑文本 1 时,焦点将转移到第二个编辑文本,依此类推。每个 Edittext 输入类型是:numberPassword。
<EditText
android:id="@+id/ed_1"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:inputType="numberPassword"
android:maxLength="1" />
Run Code Online (Sandbox Code Playgroud)
在 java 中,为了转移焦点,我们对每个 edittext 应用了以下文本观察器:
ed1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().length() == 1) {
ed1.clearFocus();
ed2.requestFocus();
ed2.setCursorVisible(true);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
Run Code Online (Sandbox Code Playgroud)
问题是,edittext 的值没有更改为 *,它显示了真实的输入数字(没有更改为密码)。只有第一个和最后一个更改为 *,其中作为中心的两个,这意味着 edittext 2 和 edittext 3 仍然具有可见的密码。
现在:我们有 4 个输入 Edittexts
所需的输出应该是:| * | * | * | * |
当我们填充值并切换焦点时,通过使用指定的java代码,它们将更改为:(输入值:1234):| * | 2 | 3 | * |
如果我们重新关注中心编辑文本中的任何一个,则值将更改为密码。是不是因为移了焦点,把一个字段改成密码所需的转换时间需要更多的时间?有什么方法可以强制将值更改为密码。
小智 2
尝试在转换后对前一个文本运行以下代码
yourEditText.setTransformationMethod(new PasswordTransformationMethod());
Run Code Online (Sandbox Code Playgroud)
这是一个困难的方法但是
String e1,e2,e3,e4;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().length() == 1 && !ed1.getText().toString().equals("*")) {
e1=ed1.getText();
ed1.setText("*");
ed2.requestFocus();
ed2.setCursorVisible(true); } }
Run Code Online (Sandbox Code Playgroud)
你可以使用这个方法