Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Узнать, открыта ли клавиатура при клике на input в WebView в Unity3d под Android

#android #unity3d #android_webview #android_softkeyboard


TouchScreenKeyboard.visible клавиатуры всегда равен false, если клавиатура открылась
по клику на input в WebView.

Как без использования нативных плагинов определить, когда клавиатура открылась/закрылась?
    


Ответы

Ответ 1



Сделал очень костыльно - использую обсервер на изменение слоя: private void InitKeyboardListener() { using (AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject activityRootView = unityClass.GetStatic("currentActivity").Call("getWindow").Call("getDecorView").Call("getRootView"); AndroidJavaObject observer = activityRootView.Call("getViewTreeObserver"); observer.Call("addOnGlobalLayoutListener", new OnGlobalLayoutListener(() => { AndroidJavaClass unityClass2 = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var activity = unityClass2.GetStatic("currentActivity"); AndroidJavaObject rect = new AndroidJavaObject("android.graphics.Rect"); AndroidJavaObject view = activity.Call("getWindow").Call("getDecorView").Call("getRootView"); view.Call("getWindowVisibleDisplayFrame", rect); AndroidJavaObject display = activity.Call("getWindowManager").Call("getDefaultDisplay"); AndroidJavaObject size = new AndroidJavaObject("android.graphics.Point"); display.Call("getSize", size); int screenHeight = size.Get("y"); int heightDiff = view.Call("getRootView").Call("getHeight") - (rect.Get("bottom") - rect.Get("top")); if (heightDiff > screenHeight / 3) { // клава открылась } else { // клава закрылась // но есть проблема, если клавиатура откреплена от футера // тогда логика тоже сюда пойдёт } })); } }

Комментариев нет:

Отправить комментарий