一.在输入文本达到指定长度时自动隐藏输入法
/**
* 在输入文本达到指定长度时自动隐藏输入法
*/
public class HideTextWatcher implements TextWatcher {
private EditText editText;//获取监听的控件
private Activity activity;//获取视图对象
private int maxLength; //编辑框的最大长度
private CharSequence mStr; //文本串
public HideTextWatcher(Activity activity, EditText editText) {
super();
this.activity = activity;
this.editText = editText;
// 通过反射机制获取编辑框的最大长度
maxLength = WidgetUtil.getMaxLength(editText);
}
// 在编辑框的输入文本变化前触发
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
}
// 在编辑框的输入文本变化时触发
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
mStr = charSequence;
}
// 在编辑框的输入文本变化后触发
public void afterTextChanged(Editable s) {
if (mStr == null || mStr.length() == 0)
return;
if (mStr.length() == maxLength) {
WidgetUtil.hideOneInputMethod(activity,editText);
}
}
}
EditText editText = findViewById(R.id.edit);
editText.addTextChangedListener(new HideTextWatcher(MainActivity.this,editText));
二.在输入回车符时自动跳到下一个控件
/**
* 定义一个编辑框监听器,在输入回车符时自动跳到下一个控件
*/
public class JumpTextWatcher implements TextWatcher {
private EditText thisView; // 声明当前编辑框对象
private EditText nextView; // 声明下一个编辑框对象
public JumpTextWatcher(EditText thisText, EditText nextView) {
super();
this.thisView=thisText;
this.nextView=nextView;
}
// 在编辑框的输入文本变化前触发
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
}
// 在编辑框的输入文本变化时触发
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
}
// 在编辑框的输入文本变化后触发
public void afterTextChanged(Editable editable) {
String str = editable.toString();
// 发现输入回车符或换行符
if (str.contains("\r") || str.contains("\n")) {
// 去掉回车符和换行符
thisView.setText(str.replace("\r", "").replace("\n", ""));
// 让下一个视图获得焦点,即将光标移到下个视图
nextView.requestFocus();
// 方式一:直接调用EditText的setSelection方法
nextView.setSelection(nextView.getText().length());
// 方式二:调用Selection类的setSelection方法
//Editable edit = nextView.getText();
//Selection.setSelection(edit, edit.length());
}
}
}
EditText editText1 = findViewById(R.id.edit1);
EditText editText2 = findViewById(R.id.edit2);
editText1.addTextChangedListener(new JumpTextWatcher(editText1, editText2));
editText2.addTextChangedListener(new JumpTextWatcher(editText2, editText1));