我的应用程序中有 3 个 EditText。我想这样做,如果用户在 EditText1 中键入并按下空格键,他将被“发送”到第二个 EditText,从 EditText2 到 EditText3 也是如此。但是,当在 EditTexts 中给定一个空格时,它不应该出现。
这可能吗?我该怎么做?
最佳答案
是的,你可以使用 TextWatcher
Java 版本
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s != null && s.endsWith("Your_special_char")){
yourDesiredEditText.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {}
});
Kotlin 版本
et1.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
if (p0?.endsWith("Your_special_char") == true){//it will eliminate nullability (trick)
yourDesiredEditText.requestFocus()
}
}
})
编辑
the only issue is I have with this is you end up with a ton of code in each event.
好的,我将使用 Kotlin 扩展函数提供一个干净整洁的解决方案
fun EditText.forwardFocusOnSpecialCharEntered(targetEditText: EditText) {
this.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
if (p0?.endsWith(" ") == true) targetEditText.requestFocus()
}
})
}
用法
firstEditText.forwardFocusOnSpecialCharEntered(secondEditText)
secondEditText.forwardFocusOnSpecialCharEntered(thirdEditText)
thirdEditText.forwardFocusOnSpecialCharEntered(firstEditText)
现在使用一行代码您就可以实现您的目标,并且您的代码保持整洁和可读
关于android - 当在键盘上按下特定字符时,我可以切换到另一个 EditText 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62661793/