android - 当在键盘上按下特定字符时,我可以切换到另一个 EditText 吗?

标签 android android-studio kotlin

我的应用程序中有 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/

相关文章:

Ubuntu 14.04 LTS 中的 Android Studio 2.2 出现错误 : "Gradle sync failed: Cause: error=13, Permission denied"

java - 如何将日期组合在一起并在 Java 或 Kotlin 中显示其数据

kotlin - 修改延迟结果

java - 如何将 created_time 字段值从 Android Studio 中的 Instagram 媒体对象转换为日期

android - 使用 Intent 传递字符串数组时出现 NullPointerException

android - Cloudant/CouchDB key /通行证权限不起作用

Android 看不到播放列表 (.m3u) 文件

java - Android Studio 中的 Fragment 问题

java - Gson IllegalStateException 预期为 BEGIN_OBJECT,但当数据类型为 CharSequence 时为 STRING

android - 想在 AVD 上的 sdcard 中创建文件夹