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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章