代码之家  ›  专栏  ›  技术社区  ›  CoolMind

如何在填充EditText并按下new键时捕获事件?

  •  0
  • CoolMind  · 技术社区  · 6 年前
    <EditText
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:imeOptions="actionNext"
        android:inputType="textNoSuggestions|textCapCharacters"
        android:maxLength="3"
        android:hint="ABC"
        />
    

    还有一个 EditText 当所有3个符号都填写在 name .

    name.addTextChangedListener(object: TextWatcher {
        override fun afterTextChanged(s: Editable?) {
            // Move to surname when all three symbols are entered.
            if (name.text.toString().length == 3) {
                surname.requestFocus()
            }
        }
    
        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
    
        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { }
    })
    

    当我们输入1、2和3符号时,它就正常工作了。但当我们选择最后一个位置 名称 ,在键盘上按一个新字母,什么都不会发生。我试图抓住一个按键

    name.setOnKeyListener { v, keyCode, event ->
        if (name.text.getText().length == 3) {
            surname.requestFocus()
        }
        false
    }
    

    3 回复  |  直到 6 年前
        1
  •  1
  •   nupadhyaya    6 年前

    maxLength 到4

    android:maxLength="4"

    afterTextChanged :

     override fun afterTextChanged(s: Editable?) {
        // Move to surname when all three symbols are entered.
        if (name.isFocused() && name.text.toString().length > 3) {
            surname.requestFocus();
            name.setText(s.toString().substring(0,3));
    
        }
    }
    
        2
  •  0
  •   Brandon    6 年前

    在beforeTextChanged()中添加一个检查,检查字符序列的长度是否已经是3个字符,如果是,则请求关注姓氏

        3
  •  0
  •   CoolMind    6 年前

    根据我的回答。

    1) 已删除 android:maxLength="3" (或可设置 android:maxLength="4" ).

    2) 为新符号添加了事件:

    name.addTextChangedListener(object: TextWatcher {
        override fun afterTextChanged(s: Editable?) {
            val text = name.text.toString()
            if (text.length >= 3) {
                surname.requestFocus()
                if (text.length > 3) {
                    // Remove symbols after third.
                    name.setText(text.substring(0, 3))
                }
            }
    
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
    
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { }
        })
    }
    

    Backspace 输入姓氏:

    surname.setOnKeyListener { _, keyCode, _ ->
        if (keyCode == KeyEvent.KEYCODE_DEL && surname.text.toString().isEmpty()) {
            // Move to the last symbol of name.
            name.requestFocus()
            name.setSelection(name.text.toString().length)
        }
        false
    }