我正在尝试做一个锁屏,锁屏基本上有四个编辑文本字段,这些字段基本上都是数字输入,提供数字部分没有问题。
现在我遇到的问题是,文本字段应该只取一个数值,而编辑文本字段应该改变焦点,在为一个字段提供值之后,如何实现这一点?
我正在尝试做一个锁屏,锁屏基本上有四个编辑文本字段,这些字段基本上都是数字输入,提供数字部分没有问题。
现在我遇到的问题是,文本字段应该只取一个数值,而编辑文本字段应该改变焦点,在为一个字段提供值之后,如何实现这一点?
使用以下属性仅输入数字
<EditText android:inputType="number" ... />
或者
<EditText
android:inputType="phone"
android:digits="1234567890"
...
/>
为了只允许数字输入(并且还显示“数字”-键盘),请使用inputType
EditText类的 - 属性。要只允许在字段中输入一位数字,您可以使用android:maxLength
-attibute。
使用 aTextWatcher
检查是否已在文本字段中输入了一位数字并将焦点更改为下一个字段。
为每个 EditText 添加一个侦听器以了解文本何时更改(确保 EditText 强制执行最大长度为 1)。此侦听器的逻辑将检查文本是否为数字且长度为 1,然后它将转移焦点。这是代码:
EditText et1 = ...;
EditText et2 = ...;
EditText et3 = ...;
EditText et4 = ...;
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if( s.length() == 1 && Character.isDigit(s.charAt(0)) ) {
et2.requestFocus();
}
}
@Override
public void afterTextChanged(Editable e) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
});
et2.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if( s.length() == 1 && Character.isDigit(s.charAt(0)) ) {
et3.requestFocus();
}
}
@Override
public void afterTextChanged(Editable e) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
});
et3.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if( s.length() == 1 && Character.isDigit(s.charAt(0)) ) {
et4.requestFocus();
}
}
@Override
public void afterTextChanged(Editable e) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
});