Unity手机输入法弹出键盘挡住游戏UI的问题

问题

在手机上,点击输入框,会弹出输入法的键盘,这个时候如果UI没有做自适应处理,则会被输入法键盘窗口挡住,如下图微信是做了自适应的,在Unity中如何获取手机输入法键盘窗口的高度,从而对UI做自适应上移呢?
在这里插入图片描述 在这里插入图片描述

解决办法

Android
// 获取手机键盘高度
public static int GetKeyboardHeight()
{
  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>("b");

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

      var decorHeight = 0;

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

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

      using (var rect = new AndroidJavaObject("android.graphics.Rect"))
      {
          view.Call("getWindowVisibleDisplayFrame", rect);
          return Display.main.systemHeight - rect.Call<int>("height") + decorHeight;
      }
  }
}
iOS
// 获取手机键盘高度
public static int GetKeyboardHeight()
{
	return (int)TouchScreenKeyboard.area.height * Display.main.systemHeight / Screen.height;
}
调用
float k = gameObject.GetComponent<RectTransform>().sizeDelta.y;
float keyboardHeight = GetKeyboardHeight();
float keyboardHeightUi = keyboardHeight * k / Display.main.systemHeight;
m_Rt.anchoredPosition = Vector3.up * keyboardHeightUi;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值