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