问题描述:在某些 Android 设备上(我可以专门测试 Realme 和 Redmi 的型号),会出现以下问题:按下软键盘上的“确定”按钮会导致 TMP_InputField 再次获得焦点,从而无意中触发软键盘重新出现。此问题会导致用户体验中断,因为用户希望键盘在提交后消失。这个问题并不是每次都会出现。我调试发现,就像 onselect 事件在某些情况下会多次排队。
Unity版本:2021.3.36f1
受影响的 TMP 版本:
-推荐版本:3.0.8
-最新预发布:3.2.0-pre.9
将导航设置为 None 有很大帮助(问题不太常见),但没有完全解决。
作为解决问题的方法,您可以将此函数添加到每个 TMP_InputField OnDeselect 监听器中,也许可以过滤掉没有问题的设备。 (通过在开始时查询每个输入字段或扩展 TMP_InputField 类(我猜是更好的解决方案))
IEnumerator DeactivateEndOfFrame(TMP_InputField inputField) { inputField.shouldHideMobileInput = true; 产量返回新的WaitForEndOfFrame(); inputField.DeactivateInputField(); EventSystem.current.SetSelectedGameObject(null); 产量返回空; // 等待一帧 inputField.shouldHideMobileInput = false; }
public void OnDeselect(TMP_InputField inputField) { StartCoroutine(DeactivateEndOfFrame(inputField)); }