如何连续移动编辑文本字段焦点

时间:2012-10-18 21:00:49

标签: android android-layout

我试图制作一个锁屏,锁屏基本上有四个编辑文本字段,这些字段基本上都是数字输入,提供数字部分没问题。

现在我遇到的问题是,文本字段应该只取一个数值,编辑文本字段应该改变焦点,在一个字段提供一个值后,如何实现这个?

3 个答案:

答案 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) { }
});