You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UnityEngine.TouchScreenKeyboard.visible异常:如何准确检测手机键盘完全显示?

准确检测Unity手机键盘是否完全显示的方法

针对TouchScreenKeyboard.visible返回值不准确的问题,你可以试试以下几种可靠的检测方案:

  • 通过屏幕可用高度变化判断
    键盘弹出会挤压屏幕可用区域,导致实际可用高度降低。可以对比初始屏幕高度与当前高度的差值,设置合理阈值过滤微小波动:

    private float _initialScreenHeight;
    
    void Start()
    {
        _initialScreenHeight = Screen.height;
    }
    
    void Update()
    {
        // 100为阈值,可根据设备测试调整,避免误判屏幕微小变化
        bool isKeyboardVisible = Screen.height < _initialScreenHeight - 100;
        // 这里使用isKeyboardVisible执行你的逻辑
    }
    

    注意:需要处理横竖屏切换的情况,切换时重新记录初始屏幕高度。

  • 结合输入框焦点状态+延迟判断
    键盘弹出必然伴随输入框获得焦点,消失则伴随失去焦点。结合焦点状态和延迟检测,规避visible的即时错误值:

    private bool _isInputFocused;
    private const float _checkDelay = 0.5f; // 键盘弹出/收起需要一定时间,延迟后判断更准确
    private float _lastFocusChangeTime;
    
    // 绑定输入框的OnFocus事件
    public void OnInputFocused()
    {
        _isInputFocused = true;
        _lastFocusChangeTime = Time.time;
    }
    
    // 绑定输入框的OnEndEdit事件
    public void OnInputLostFocus()
    {
        _isInputFocused = false;
        _lastFocusChangeTime = Time.time;
    }
    
    void Update()
    {
        bool isKeyboardReallyVisible = false;
        if (_isInputFocused && Time.time - _lastFocusChangeTime > _checkDelay)
        {
            isKeyboardReallyVisible = TouchScreenKeyboard.visible;
        }
        else if (!_isInputFocused && Time.time - _lastFocusChangeTime > _checkDelay)
        {
            isKeyboardReallyVisible = false;
        }
        // 使用isKeyboardReallyVisible做后续逻辑
    }
    
  • 监听输入框RectTransform位置变化
    若使用UGUI且开启了键盘适配(比如Canvas设置为Screen Space - Overlay),键盘弹出时输入框会被向上推送。可以对比输入框初始Y轴位置与当前位置的差值:

    public RectTransform inputFieldRect;
    private float _initialInputY;
    
    void Start()
    {
        _initialInputY = inputFieldRect.anchoredPosition.y;
    }
    
    void Update()
    {
        // 50为阈值,根据你的UI布局调整
        bool isKeyboardVisible = inputFieldRect.anchoredPosition.y > _initialInputY + 50;
    }
    

额外注意

  • iOS和Android的键盘行为存在差异,建议在目标平台上多测试,调整阈值和延迟参数。
  • 不要在Start/Awake中直接判断TouchScreenKeyboard.visible,此时键盘未完成初始化,容易得到错误结果。

内容的提问来源于stack exchange,提问作者Alyra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:03:19