use*_*399 3 c# android back-button unity-game-engine input-field
我有两种方法可以触发该输入字段的 Unity 事件,我尝试将输入字段值保存到变量中,然后在按下后退按钮时将该值返回给输入字段,但它在 Android 上不起作用。它与 Unity 编辑器配合得很好
public string passwordHolder = "";
public void OnEditting()
{
if (Application.platform == RuntimePlatform.Android)
{
if (!Input.GetKeyDown(KeyCode.Escape))
{
passwordHolder = passwordText.text;
}
}
}
public void OnEndEdit()
{
if (Application.platform == RuntimePlatform.Android)
{
if (Input.GetKeyDown(KeyCode.Escape))
{
passwordText.text = passwordHolder;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
当键盘打开时,“输入”无法正常工作。因此,您无法使用“ESC”/后退按钮进行检查。
我所做的是创建一个方法来监听键盘状态变化的事件。如果要隐藏(已取消),我会将之前的文本保留在字段中。
我使用 InputField 组件将脚本添加到对象中,这是我在“Start”中放入的代码:
inputField = gameObject.GetComponent<TMP_InputField>();
inputField.onEndEdit.AddListener(EndEdit);
inputField.onValueChanged.AddListener(Editing);
inputField.onTouchScreenKeyboardStatusChanged.AddListener(ReportChangeStatus);
Run Code Online (Sandbox Code Playgroud)
这是方法的代码:
private void ReportChangeStatus(TouchScreenKeyboard.Status newStatus)
{
if (newStatus == TouchScreenKeyboard.Status.Canceled)
keepOldTextInField = true;
}
private void Editing(string currentText)
{
oldEditText = editText;
editText = currentText;
}
private void EndEdit(string currentText)
{
if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText))
{
//IMPORTANT ORDER
editText = oldEditText;
inputField.text = oldEditText;
keepOldTextInField = false;
}
}
Run Code Online (Sandbox Code Playgroud)
它对我有用,我希望对你也有用。