有没有办法知道用户在EditText中键入哪种语言?或限制用户仅输入英语



任何人都有获取用户语言的想法,谁正在EditText中输入。

我试过什么?

  1. 请不要建议谷歌的com.google.mlkit,我已经尝试过,但当用户快速输入时不起作用。
  2. 我也尝试设置android:digits="All Alfabets",当我从剪贴板长按和粘贴时它不起作用,它允许来自其他语言的文本。

这似乎是一个非常复杂的问题!限制允许的字符无法解决的问题 - 许多非英语语言使用与英语相同的拉丁字符集,或者将其用于其书面语言的罗马化版本。nihongo o kaite imasu是日语,但这可以通过字母检查!

即使在使用其他字符的地方(例如重音版本),人们在打字时放弃它们并使用"标准英语"字符并不罕见,特别是如果它们是非正式的 - 例如西班牙语在像 ¿qué?这样的疑问词上使用重音,但人们可能只是不打扰(也跳过 ¿,或者如果他们真的很非正式,就说k)

还有一个事实是,英语确实使用重音字符 - 有人可能很天真胡说八道,但你不希望你的应用程序告诉人们如果他们写这些东西,他们"没有用英语打字"。


我对mlkit一无所知,但如果它能够在一定程度上检测语言,那么它真的可能是解决如此复杂的人类问题的方法。我建议不要试图干扰用户的打字,而只需在他们完成后触发检查,以验证他们输入的内容。如果看起来不错,您可以启用按钮或其他任何内容 - 如果没有,则显示错误消息并让他们自己修复。

你可以用TextWatcher(或ktx-coreAndroidX库附带的doAfterTextChanged扩展功能)做这种事情 - 你可能想启动一个延迟的任务,以便在他们停止打字后发生,如果他们再次开始打字,你可以中断

val languageCheck = Runnable {
// do your check here, enable buttons / show errors as a result
}
// set up the checker
textView.doAfterTextChanged {
// cancel an existing delayed task
textView.removeCallbacks(languageCheck)
// schedule a new one
textView.postDelayed(languageCheck, delayMillis)
}

最新更新