文本框(EditView)控制技巧

一.在输入文本达到指定长度时自动隐藏输入法

/**
 * 在输入文本达到指定长度时自动隐藏输入法
 */
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));

WidgetUtil

二.在输入回车符时自动跳到下一个控件

/**
 * 定义一个编辑框监听器,在输入回车符时自动跳到下一个控件
 */
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));

猜你喜欢

转载自blog.csdn.net/m0_48440239/article/details/114189929
今日推荐