【发布时间】:2018-02-24 05:16:33
【问题描述】:
我正在使用视图输入用户的四位 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" />
在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) {
}
});
问题是edittext的值没有变成*,它显示的是真实的输入数字(没有变成密码)。只有第一个和最后一个更改为 *,其中中心 2 表示 edittext 2 和 edittext 3 仍然有可见密码。
现在:我们有 4 个输入编辑文本
期望的输出应该是:| * | * | * | * |
当我们填充值并切换焦点时,通过使用指定的java代码,它们会变为:(输入值:1234):| * | 2 | 3 | * |
如果我们重新关注任何一个中心编辑文本,那么值就会更改为密码。是不是因为去掉了焦点,而将字段更改为密码所需的转换时间需要更多时间?有什么方法可以强制将值更改为密码。
【问题讨论】:
-
因为您没有为这两个编辑文本使用此属性。设置此属性 android:inputType="textPassword" 并完成先生
-
我希望它会如此简单。每个编辑文本都是问题中指定的精确复制。每个都有 android:inputType="numberPassword"
-
尝试将代码放在 Runnable 中,然后发布,有帮助吗?
-
您可以使用 Handler 进行延迟,以便它会更改文本。 Check my answer below
-
您找到合适的解决方案了吗?我也面临同样的问题。