#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 { // клава закрылась // но есть проблема, если клавиатура откреплена от футера // тогда логика тоже сюда пойдёт } })); } }
Комментариев нет:
Отправить комментарий