Виртуальная клавиатура с перекрытием ввода в веб-представлении

Я не уверен, что кто-нибудь сможет помочь, так как у меня есть эта проблема с Genero, которая я весьма непопулярна, но я приму любую общую идею, которую вы, ребята, могли бы иметь.

У меня есть веб-приложение Genero, которое отображает веб-вид приложения Angular, и проблема, с которой я сталкиваюсь, заключается в том, что представление (на основе Chrome v72) не будет прокручиваться под входом, когда оно фокусируется, чтобы позволить пользователю увидеть, что он типирование.

Загрузка страницы в браузере работает очень хорошо, и я попробовал это в веб-представлении студии Android, которое также работает.

Так что я не знаю, является ли проблема самим Genero или, может быть, каким-то особым образом он отображает представление, другую конфигурацию браузера и т. Д.

Все идеи приветствуются, если вы столкнулись с такой проблемой, независимо от контекста, я попробую все, и я хотел бы избежать необходимости использовать какой-то хак, который создает пространство под вводом и прокручивая вручную фокус.

4 ответа

Решение

Что ж, похоже, это скорее проблема Genero в том, как он обрабатывает веб-просмотры, помещая виртуальную клавиатуру поверх веб-контента, а не внутри него. Мы взяли это на их форуме, и они изучают это.

Убедитесь, что вы используете оператор INPUT, а не DISPLAY в сочетании с WEBCOMPONENT. Об этом сообщалось в Android https://4js.com/support/issue/?id=GMA-1319 но тот же принципал мог применять iOS, GBC, GDC

В противном случае сообщите об этом в местную службу поддержки 4J (если вы находитесь на техническом обслуживании). В прошлом были случаи, когда в этой области выполнялась работа https://4js.com/support/issue/?id=GMA-920 и поэтому в этой области может потребоваться некоторая доработка.

PS Что касается вашего вступительного абзаца, у 4Js Genero есть модель платной поддержки. Парадокс этого в том, что вы не увидите здесь много вопросов о 4J Genero, потому что на них должны ответить 1. ваш местный контакт в службу поддержки и 2. наш форум для разработчиков. Затем это работает против нас в измерениях популярности языка, которые используют такие показатели, как количество сообщений переполнения стека.

Это была чисто проблема Genero, которая, насколько мне известно, с тех пор была исправлена.

То, что происходит, это то, что ваш рост div не подстраивается под виртуальную клавиатуру.

Я бы предложил сделать что-то вроде этого в конструкторе:

const $resizeEvent = fromEvent(window, 'resize')
       .map(() => {
         return window.innerHeight;
       })
       .debounceTime(20).subscribe(data => {
          this.overflowHeight = `${data}px`;
       });

То, что это будет делать, это обнаруживать изменение размера, оно будет отображаться при появлении клавиатуры. Затем вы меняете высоту на новую высоту div. Когда он закроется, он снова сработает и снова станет нормальным.

В вашем HTML:

<div [ngStyle]="'height': overflowHeight, 'overflow': 'auto'}" [scrollTop]="scrollHeight"></div>

Заголовки, если вы используете дочерний вид, убедитесь, что вы проверили, сколько пикселей окружено, и сделайте высоту - пикселей.

Каждый вход должен иметь уникальный идентификатор:

<input id={{uniqueId}} (focus)="scrollTo(uniqueId) (scroll)="setScrollHeigth($event)" />

И тогда вы делаете:

private scrollTo(_index: any) {
        if (window.screen.width === 360) {
            height = document.getElementById(_index).offsetTop;
            if (height > 0) { this.scrollHeight = height; }
            else if (this.scrollHeigthElm > 0) { this.scrollHeight = 0; }
        }
} 

private setScrollHeigth(_event: any) { 
    this.scrollHeigthElm = _event.srcElement.scrollTop; 
} 

Для этого нужно проверить, не превышает ли ваш свиток ноль, и переместить его. И сбросьте его, когда ваш свиток на 0.

Другие вопросы по тегам