C# 使用InputField时隐藏虚拟键盘

C# 使用InputField时隐藏虚拟键盘,c#,android,unity3d,C#,Android,Unity3d,我知道如何使用InputMethodManager隐藏或显示虚拟键盘 但我想使用物理键盘在EditText中输入文本,但我不想在Unity 3D Android中显示虚拟键盘 我如何在Unity 3D中做到这一点 在Unity中不存在EditText这样的东西。用于接收来自设备的输入 您可以在Android上使用InputField禁用虚拟关键字。不确定这是否适用于其他平台 您的输入字段: public InputField inputField; 禁用虚拟键盘: inputField.key

我知道如何使用
InputMethodManager
隐藏或显示虚拟键盘

但我想使用物理键盘在
EditText
中输入文本,但我不想在Unity 3D Android中显示虚拟键盘

我如何在Unity 3D中做到这一点


在Unity中不存在
EditText
这样的东西。用于接收来自设备的输入

您可以在Android上使用
InputField
禁用虚拟关键字。不确定这是否适用于其他平台

您的输入字段:

public InputField inputField;
禁用虚拟键盘:

inputField.keyboardType = (TouchScreenKeyboardType)(-1);
inputField.keyboardType = TouchScreenKeyboardType.Default;
启用虚拟键盘:

inputField.keyboardType = (TouchScreenKeyboardType)(-1);
inputField.keyboardType = TouchScreenKeyboardType.Default;

如果遇到一些奇怪的问题,请考虑从代码< >输入字段>代码>导出脚本,然后禁用虚拟键盘,最后调用<代码>代码>开始/代码>函数:

public class HideVirtualKeyboard : InputField
{
    protected override void Start()
    {
        keyboardType = (TouchScreenKeyboardType)(-1);
        base.Start();
    }
}

在Unity中不存在
EditText
这样的东西。用于接收来自设备的输入

您可以在Android上使用
InputField
禁用虚拟关键字。不确定这是否适用于其他平台

您的输入字段:

public InputField inputField;
禁用虚拟键盘:

inputField.keyboardType = (TouchScreenKeyboardType)(-1);
inputField.keyboardType = TouchScreenKeyboardType.Default;
启用虚拟键盘:

inputField.keyboardType = (TouchScreenKeyboardType)(-1);
inputField.keyboardType = TouchScreenKeyboardType.Default;

如果遇到一些奇怪的问题,请考虑从代码< >输入字段>代码>导出脚本,然后禁用虚拟键盘,最后调用<代码>代码>开始/代码>函数:

public class HideVirtualKeyboard : InputField
{
    protected override void Start()
    {
        keyboardType = (TouchScreenKeyboardType)(-1);
        base.Start();
    }
}

我知道这个老问题,但您真正想要的是设置
inputField.touchScreenKeyboard.active=false您可能需要在
最新更新中将其保留为false

[SerializeField] 
private bool keyboardEnabled = true;
// toggle this to toggle native keyboard activity
public bool KeyboardEnabled { get { return keyboardEnabled; } set { keyboardEnabled = value; } }

private void LateUpdate()
{
#if UNITY_ANDROID
    if (inputField.touchScreenKeyboard != null && !keyboardEnabled)
    {
        inputField.touchScreenKeyboard.active = false;
    }
#endif
}

我知道这个老问题,但您真正想要的是设置
inputField.touchScreenKeyboard.active=false您可能需要在
最新更新中将其保留为false

[SerializeField] 
private bool keyboardEnabled = true;
// toggle this to toggle native keyboard activity
public bool KeyboardEnabled { get { return keyboardEnabled; } set { keyboardEnabled = value; } }

private void LateUpdate()
{
#if UNITY_ANDROID
    if (inputField.touchScreenKeyboard != null && !keyboardEnabled)
    {
        inputField.touchScreenKeyboard.active = false;
    }
#endif
}

我认为这不是正确的处理方法。我自己也试过,它抑制了前面提到的键盘。然后,我构建了一个Android应用程序进行测试,启动了良好的ol'adb logcat,发现我的终端充斥着索引越界异常。@Esper这就是我喜欢的原因。你总能改进答案。如果你知道“正确”的方法确实有效,那么就提供一个答案。你是对的,我说这不是“正确”的方法是错误的,因为没有“正确”的方法来解决这个具体问题。我应该说的是,这不是一个可行的解决方案,因为它在运行时会产生错误。没问题。这解决了问题,但在Unity添加官方属性或功能之前,这只是一个变通办法。在那之前,我们一直在做这件事。在撰写本文时,未获取任何错误日志。也许在Unity中情况发生了变化,但我不认为这个错误会阻止你的比赛。我不认为这是正确的处理方法。我自己也试过,它抑制了前面提到的键盘。然后,我构建了一个Android应用程序进行测试,启动了良好的ol'adb logcat,发现我的终端充斥着索引越界异常。@Esper这就是我喜欢的原因。你总能改进答案。如果你知道“正确”的方法确实有效,那么就提供一个答案。你是对的,我说这不是“正确”的方法是错误的,因为没有“正确”的方法来解决这个具体问题。我应该说的是,这不是一个可行的解决方案,因为它在运行时会产生错误。没问题。这解决了问题,但在Unity添加官方属性或功能之前,这只是一个变通办法。在那之前,我们一直在做这件事。在撰写本文时,未获取任何错误日志。也许Unity的情况已经改变了,但我不认为这个错误会阻止你的比赛。