Android 在编辑文本之间自动传递焦点
因为我问的问题没有得到太多的关注,我带着另一个问题来到这里,关于实现我需要的另一种方法 所以,我的想法是有四个EditText,长度为4个字符。现在我要做的是将焦点更改为用户类型,当达到限制时,从一个EdutText更改为另一个。 例如:假设我们有文本A,B,C,D;首先获得焦点的是EditText A,然后当A处的字符长度达到4时,焦点传递到EditText B,依此类推,并在D处停止 我正在尝试下面的代码,但是当长度达到4个字符时,不会请求焦点Android 在编辑文本之间自动传递焦点,android,android-edittext,autofocus,Android,Android Edittext,Autofocus,因为我问的问题没有得到太多的关注,我带着另一个问题来到这里,关于实现我需要的另一种方法 所以,我的想法是有四个EditText,长度为4个字符。现在我要做的是将焦点更改为用户类型,当达到限制时,从一个EdutText更改为另一个。 例如:假设我们有文本A,B,C,D;首先获得焦点的是EditText A,然后当A处的字符长度达到4时,焦点传递到EditText B,依此类推,并在D处停止 我正在尝试下面的代码,但是当长度达到4个字符时,不会请求焦点 inputFieldA.requestFocu
inputFieldA.requestFocus();
inputFieldA.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(s.toString().trim().length() == 4){
inputFieldB.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
inputFieldB.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(s.toString().trim().length() == 4){
inputFieldC.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
inputFieldC.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(s.toString().trim().length() == 4){
inputFieldD.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
inputFieldD.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(s.toString().trim().length() == 4){
//send all to Main EditText (A + B + C + D)
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
所以我在这里问是否有办法做到这一点 不是在CharSeq长度的基础上添加验证,而是在edittext文本的基础上添加验证,如下所示: 替换
if(s.toString().trim().length() == 4)
与
注意:同时更新您的情况
currentedText
将根据您的要求分别为inputFieldA
、inputFieldB
、inputFieldC
if(inputFieldA.toString().trim().length() == 4){
inputFieldB.requestFocus();
}
在onTextChange()方法中替换这几行。在后置extChanged方法中写入您的条件,并进行如下更改:
inputFieldA.requestFocus();
inputFieldA.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldA.getText().toString().trim().length() == 4){
inputFieldB.requestFocus();
}
}
});
inputFieldB.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldB.getText().toString().trim().length() == 4){
inputFieldC.requestFocus();
}
}
});
inputFieldC.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldC.getText().toString().trim().length() == 4){
inputFieldD.requestFocus();
}
}
});
inputFieldD.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldD.getText().toString().trim().length() == 4){
//send all to Main EditText (A + B + C + D)
}
}
});
我同意你的建议,但什么也没发生。我应该如何更新条件?您的解决方案只能从A到B工作,而不是从B到C。如果(inputFieldB.getText().toString().trim().length()==4){inputFieldC.requestFocus();}我做了,但在@SurajMukhija建议的后TextChanged方法上,它现在可以工作了
inputFieldA.requestFocus();
inputFieldA.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldA.getText().toString().trim().length() == 4){
inputFieldB.requestFocus();
}
}
});
inputFieldB.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldB.getText().toString().trim().length() == 4){
inputFieldC.requestFocus();
}
}
});
inputFieldC.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldC.getText().toString().trim().length() == 4){
inputFieldD.requestFocus();
}
}
});
inputFieldD.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(inputFieldD.getText().toString().trim().length() == 4){
//send all to Main EditText (A + B + C + D)
}
}
});