我试图让脚进入页面,我创建了4个EditTexts和我创建了一个功能,该数值低于我的活动。我的问题是,当我点击退格键,我想现在的EditText集中到前(后)的EditText,但关键听众不工作。
逻辑很简单,当用户输入一个号码的EditText,它losts聚焦和下一个的EditText越来越聚焦,则它进入这样。但问题是,当我点击后面的空间,我想回去的EditText之前再次输入号码。我试图插入的KeyListener beforeTextChange内但没有奏效。
private void SetTextChange(final EditText etCurrent, final EditText etForward,final EditText etBack, final boolean isLast, final int currentPosition)
{
etCurrent.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 (etCurrent.getText().length() == 1 && !isLast ) {
etCurrent.setTypeface(null, Typeface.NORMAL);
etCurrent.clearFocus();
etForward.requestFocus();
etForward.setCursorVisible(true);
etCurrent.getBackground().setColorFilter(getResources().getColor(R.color.lavender_indigo), PorterDuff.Mode.SRC_ATOP);
} else if (etCurrent.length() == 0) {
etCurrent.getBackground().setColorFilter(getResources().getColor(R.color.french_gray), PorterDuff.Mode.SRC_ATOP);
etCurrent.setTypeface(null, Typeface.SANS_SERIF.getStyle());
etCurrent.setTypeface(null, Typeface.NORMAL);
etCurrent.clearFocus();
etBack.requestFocus();
etBack.setCursorVisible(true);
}
if (etCurrent.length() != 0) {
Integer currentKey = Integer.parseInt(etCurrent.getText().toString());
keyList.set(currentPosition, currentKey);
} else
keyList.set(currentPosition, -1);
if (keyList.size() > 3)
showToast(keyList.get(0) + " " + keyList.get(1) + " " + keyList.get(2) + " " + keyList.get(3));
}
@Override
public void afterTextChanged(Editable s) {
}
});
/*curText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View arg0, boolean arg1) {
curText = etCurrent;
backText = etBack;
curText.setText("");
}
});*/
}
这也是我的EditText示例XML的一个。(其它都一样)
<EditText
android:layout_column="1"
android:layout_columnWeight="1"
android:id="@+id/etActivationDigit1"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:textSize="80dp"
android:textAlignment="center"
android:gravity="center_horizontal"
android:hint="*"
android:textColorHint="@color/french_gray"
android:backgroundTint="@color/french_gray"
android:fontFamily="sans-serif"
android:textColor="@color/perfume"
android:maxLength="1"
android:inputType="number"
/>
我只是想擦除和焦点放回当用户输入错误的号码。注意:当您填写所有内容,你会看到,你可以删除,回去,但我想回去的PIN码中。谢谢。
etCurrent.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(etCurrent.getText().toString() == "" && keyCode == event.KEYCODE_DEL)
{
etCurrent.setText("");
etCurrent.clearFocus();
etBack.requestFocus();
etBack.setText("");
}
return false;
}
});
我的退格听者不触发,当我触摸退格键,但它触发所有其它字符。
这是我的4位数的PIN码活动什么工作。
private void setupInputListeners() {
verificationCode1EditText.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.length() == 1) {
verificationCode2EditText.requestFocus(View.FOCUS_DOWN);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
verificationCode2EditText.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(count == 0) {
verificationCode1EditText.requestFocus(View.FOCUS_DOWN);
} else {
if (s.length() == 1) {
verificationCode3EditText.requestFocus(View.FOCUS_DOWN);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
verificationCode3EditText.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(count == 0) {
verificationCode2EditText.requestFocus(View.FOCUS_DOWN);
} else {
if (s.length() == 1) {
verificationCode4EditText.requestFocus(View.FOCUS_DOWN);
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
verificationCode4EditText.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(count == 0) {
verificationCode3EditText.requestFocus(View.FOCUS_DOWN);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
只需在您的EDITTEXT onTextChanged方法中添加以下代码
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(yourEditText.length()==0){
priviousEditText.requestFocus();
}
}
看看这个。 MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText one = (EditText) findViewById(R.id.edtOne);
final EditText two = (EditText) findViewById(R.id.edtTwo);
final EditText three = (EditText) findViewById(R.id.edtThree);
final EditText four = (EditText) findViewById(R.id.edtFour);
one.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
two.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(s.toString().trim().length() == 0){
one.requestFocus();
one.setSelection(one.getText().toString().length());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
three.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(s.toString().trim().length() == 0){
two.requestFocus();
two.setSelection(two.getText().toString().length());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
four.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(s.toString().trim().length() == 0){
three.requestFocus();
three.setSelection(three.getText().toString().length());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
}
//使用此代码作为参考。
customDialog.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
customDialog.dismiss();
HomeActivity.this.finish();
} else if (keyCode == KeyEvent.KEYCODE_DEL) {
if (!pin3.getText().toString().equals("")) {
pin3.setText("");
pin3.requestFocus();
} else if (!pin2.getText().toString().equals("")) {
pin2.setText("");
pin2.requestFocus();
} else if (!pin1.getText().toString().equals("")) {
pin1.setText("");
pin1.requestFocus();
}
}
}
return true;
}
});
return customDialog;
我在我的应用程序中使用此代码,它的工作原理完全。
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:id="@+id/edtOne"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="0" />
<EditText
android:id="@+id/edtTwo"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="2" />
<EditText
android:id="@+id/edtThree"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="3" />
<EditText
android:id="@+id/edtFour"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="4" />
</LinearLayout>
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
if (mPineighthDigitEditText.getText().length() ==0 )
{ //mPineighthDigitEditText.setText("");
mPinseventthDigitEditText.requestFocus();
}
if (mPinseventthDigitEditText.getText().length() == 0){
// mPinseventthDigitEditText.setText("");
mPinsixthDigitEditText.requestFocus();}
if (mPinsixthDigitEditText.getText().length() == 0) {
// mPinsixthDigitEditText.setText("");
mPinFifthDigitEditText.requestFocus();}
if (mPinFifthDigitEditText.getText().length() == 0){
//mPinFifthDigitEditText.setText("");
mPinForthDigitEditText.requestFocus();}
if (mPinForthDigitEditText.getText().length() == 0){
// mPinForthDigitEditText.setText("");
mPinThirdDigitEditText.requestFocus();}
if (mPinThirdDigitEditText.getText().length() == 0){
//mPinThirdDigitEditText.setText("");
mPinSecondDigitEditText.requestFocus();}
if (mPinSecondDigitEditText.getText().length() == 0){
//mPinSecondDigitEditText.setText("");
mPinFirstDigitEditText.requestFocus();}
if (mPinFirstDigitEditText.getText().length() == 0 ) {
mPinFirstDigitEditText.setText("");
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
如果有多个编辑短信申请的谢谢:)
只要在这里像下面使用StringBuilder,并说明EDITTEXT你想专注于退格键:
StringBuilder sb = new StringBuilder(); //define this inside addTextChangedListner
public void afterTextChanged (Editable s) {
if (sb.length() == 0) {
previousEditText.requestFocus();
}
}