在 Android 上按后退按钮关闭/隐藏键盘会清除我的输入字段 Unity

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)

我究竟做错了什么?

Gui*_*Poy 5

当键盘打开时,“输入”无法正常工作。因此,您无法使用“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)

它对我有用,我希望对你也有用。