我试图制作一个锁屏,锁屏基本上有四个编辑文本字段,这些字段基本上都是数字输入,提供数字部分没问题。
现在我遇到的问题是,文本字段应该只取一个数值,编辑文本字段应该改变焦点,在一个字段提供一个值后,如何实现这个?
答案 0 :(得分:0)
使用以下属性仅输入数字
<EditText android:inputType="number" ... />
或
<EditText
android:inputType="phone"
android:digits="1234567890"
...
/>
答案 1 :(得分:0)
仅允许数字输入(并且还显示“数字”键盘),请使用EditText类的inputType
-attribute。要仅允许在字段中输入一位数字,您可以使用android:maxLength
-attibute。
使用TextWatcher
检查是否已在文本字段中输入了一位数字,并将焦点更改为下一个字段。
答案 2 :(得分:0)
在文本更改时为每个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) { }
});