Unity3d游戏聊天匹配手机虚拟键盘

在Unity2019.4和Fairygui 2022.1环境下开发游戏聊天系统时,遇到输入框根据虚拟键盘高度自适应的需求。文章讲述了如何正确计算虚拟键盘高度,并解决不同手机上高度获取不一致的问题,以及在部分设备上键盘关闭时高度不变的bug。关键在于使用UI适配后的高度而非Screen.height来计算,同时注意到某些设备获取到的非键盘部分高度可能大于屏幕高度,需要进行修正。在IQOO等品牌手机上存在监听虚拟键盘高度变化的问题,尚待进一步研究。
摘要由CSDN通过智能技术生成

项目最近开发聊天系统,有这么一个需求:输入框根据键盘的高度来做适应,意思就是说,根据键盘的高度,动态改变游戏聊天视图的高度。
然后记录一下过程吧。

开发环境:Unity2019.4 , Fairygui 2022.1

思路:
1,获取虚拟键盘高度
2,根据虚拟键盘高度计算需要显示的UI高度

首先,核心内容,计算虚拟键盘高度,这部分比较容易找到。

  /// <summary>
    /// 获取软键盘高度
    /// </summary>
    /// <param name="includeInput">是否包含输入框 </param>
    /// <param name="screenHeight">屏幕高度</param>
    /// <returns></returns>
    public static int GetKeyboardHeight(bool includeInput, int screenHeight)
    {
   
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
        return 0;
#elif UNITY_STANDALONE_OSX || UNITY_IPHONE
        return  (int)UnityEngine.TouchScreenKeyboard.area.height;
#elif UNITY_ANDROID
         using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
   
            var unityPlayer = unityClass.GetStatic<AndroidJavaObject>("currentActivity")
                .Get<AndroidJavaObject>("mUnityPlayer");
            var view = unityPlayer.Call<AndroidJavaObject>("getView");
            var dialog = unityPlayer.Get<AndroidJavaObject>("mSoftInputDialog");

            if (view == null || dialog == null)
                return 0;

            var decorHeight = 0;

            if (includeInput)
            {
   
                var decorView = dialog.Call<AndroidJavaObject>("getWindow").Call<AndroidJavaObject>("getDecorView");

                if (decorView != null)
                    decorHeight = decorView.Call<int>("getHeight");
            }

            using (var rect = new 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值