¿Cómo cambiar el tamaño de la vista cuando el teclado de la pantalla táctil está visible en Android con Unity?

En Unity no puedo controlar el teclado de la pantalla táctil. La clase TouchScreenKeyboard solo tiene un parámetro para Android.

if(TouchScreenKeyboard.visible) { float keyboardHeight = TouchScreenKeyboard.area.height; // will resize the view here! But this return zero! } 

¿Hay alguna otra manera de saber la altura del teclado en Android?

Esto debería hacer el truco ( encontrado aquí ):

  public int GetKeyboardSize() { using(AndroidJavaClass UnityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject View = UnityClass.GetStatic("currentActivity").Get("mUnityPlayer").Call("getView"); using(AndroidJavaObject Rct = new AndroidJavaObject("android.graphics.Rect")) { View.Call("getWindowVisibleDisplayFrame", Rct); return Screen.height - Rct.Call("height"); } } } 

Fue hace mucho tiempo, pero en caso de que alguien esté luchando con él nuevamente, logré encontrar una solución para un panel con un InputField utilizando esta clase de MonoBehaviour. Lo conecté al InputField y vinculé el panel que debería cambiar de tamaño.

 public class InputFieldForScreenKeyboardPanelAdjuster : MonoBehaviour { // Assign panel here in order to adjust its height when TouchScreenKeyboard is shown public GameObject panel; private InputField inputField; private RectTransform panelRectTrans; private Vector2 panelOffsetMinOriginal; private float panelHeightOriginal; private float currentKeyboardHeightRatio; public void Start() { inputField = transform.GetComponent(); panelRectTrans = panel.GetComponent(); panelOffsetMinOriginal = panelRectTrans.offsetMin; panelHeightOriginal = panelRectTrans.rect.height; } public void LateUpdate () { if (inputField.isFocused) { float newKeyboardHeightRatio = GetKeyboardHeightRatio(); if (currentKeyboardHeightRatio != newKeyboardHeightRatio) { Debug.Log("InputFieldForScreenKeyboardPanelAdjuster: Adjust to keyboard height ratio: " + newKeyboardHeightRatio); currentKeyboardHeightRatio = newKeyboardHeightRatio; panelRectTrans.offsetMin = new Vector2(panelOffsetMinOriginal.x, panelHeightOriginal * currentKeyboardHeightRatio); } } else if (currentKeyboardHeightRatio != 0f) { if (panelRectTrans.offsetMin != panelOffsetMinOriginal) { SmartCoroutine.DelayedExecute(this, () => { Debug.Log("InputFieldForScreenKeyboardPanelAdjuster: Revert to original"); panelRectTrans.offsetMin = panelOffsetMinOriginal; }, 0.5f); } currentKeyboardHeightRatio = 0f; } } private float GetKeyboardHeightRatio() { if (Application.isEditor) { return 0.4f; // fake TouchScreenKeyboard height ratio for debug in editor } #if UNITY_ANDROID using (AndroidJavaClass UnityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject View = UnityClass.GetStatic("currentActivity").Get("mUnityPlayer").Call("getView"); using (AndroidJavaObject rect = new AndroidJavaObject("android.graphics.Rect")) { View.Call("getWindowVisibleDisplayFrame", rect); return (float)(Screen.height - rect.Call("height")) / Screen.height; } } #else return (float)TouchScreenKeyboard.area.height / Screen.height; #endif } }