Страницы

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

понедельник, 30 марта 2020 г.

Как отобразить элемент ввода над клавиатурой, если она была вызвана на элементе input в WebView

#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 меняю:
В итоге костыль на костыле, но вроде всё работает:

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

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