#android #unity3d #android_webview #android_softkeyboard
Использую UniWebView для отображения своего приложения/сайта. При клике на инпут клава перекрывает поле для ввода. Если бы это был нативный EditText, то клава бы сдвинула контент вверх и всё было бы нормально. android:windowSoftInputMode="adjustPan" не помогает. TouchScreenKeyboard.hideInput = false клавиатуры, чтоб хоть дефолтное поле было, тоже не работает. Как мне сделать видимым поле ввода?
Ответы
Ответ 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 { // клава закрылась // но есть проблема, если клавиатура откреплена от футера // тогда логика тоже сюда пойдёт } })); } } Передаю эту высоту в WebView, вызываю свою js функцию: public static void SetKeyboardOffset(int height) { string code = string.Format("window.globalReactFunctions.apiSetKeyboardOffset('{0}')", height); m_WebView.EvaluateJavaScript(code, (payload) => { }); } В коде блока страницы padding меняю: В итоге костыль на костыле, но вроде всё работает:
Комментариев нет:
Отправить комментарий