虚拟键盘在 webview 中重叠输入
Virtual keyboard overlapping input in webview
我不确定是否有人能够提供帮助,因为我遇到了 Genero 的这个问题,我非常不受欢迎,但我会接受你们可能有的任何一般想法。
我有一个显示 Angular 应用程序网页视图的 Genero 网络应用程序,我遇到的问题是视图(Chrome v72 基于)不会在输入下滚动当它获得焦点时允许用户看到他正在输入的内容。
在浏览器中加载页面效果很好,我已经在 Android studio webview 中尝试过,它也能正常工作。
所以我不知道是 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>
注意 如果您使用子视图,请确保检查周围有多少像素并计算高度 - 像素。
每个输入都需要有一个唯一的 ID:
<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 时重置它。
确保您使用的是 INPUT 语句而不是 DISPLAY 与您的 WEBCOMPONENT 结合使用。这是用 Android https://4js.com/support/issue/?id=GMA-1319 报告的,但同样的主体可以应用 iOS、GBC、GDC
否则请与您当地的 4Js 支持联系人联系(假设您正在维护中)。过去曾有过在该领域开展工作的案例 https://4js.com/support/issue/?id=GMA-920,因此可能需要在该领域进行一些改进。
PS 关于您的开头段落,4Js Genero 有付费支持模式。矛盾的是,您不会在这里看到很多 4Js Genero 问题,因为它们应该 1. 由您当地的支持联系人和 2. 我们的开发人员论坛回答。然后,这在使用 Stack Overflow 帖子数量等度量的语言流行度度量中对我们不利。
好吧,这似乎更像是一个 Genero 问题,它处理网络视图的方式是将虚拟键盘放在网络内容上,而不是在其中。我们把它带到了他们的论坛,他们正在调查它。
这是一个纯粹的 Genero 问题,据我所知,此后已得到修复。
我不确定是否有人能够提供帮助,因为我遇到了 Genero 的这个问题,我非常不受欢迎,但我会接受你们可能有的任何一般想法。
我有一个显示 Angular 应用程序网页视图的 Genero 网络应用程序,我遇到的问题是视图(Chrome v72 基于)不会在输入下滚动当它获得焦点时允许用户看到他正在输入的内容。
在浏览器中加载页面效果很好,我已经在 Android studio webview 中尝试过,它也能正常工作。
所以我不知道是 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>
注意 如果您使用子视图,请确保检查周围有多少像素并计算高度 - 像素。
每个输入都需要有一个唯一的 ID:
<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 时重置它。
确保您使用的是 INPUT 语句而不是 DISPLAY 与您的 WEBCOMPONENT 结合使用。这是用 Android https://4js.com/support/issue/?id=GMA-1319 报告的,但同样的主体可以应用 iOS、GBC、GDC
否则请与您当地的 4Js 支持联系人联系(假设您正在维护中)。过去曾有过在该领域开展工作的案例 https://4js.com/support/issue/?id=GMA-920,因此可能需要在该领域进行一些改进。
PS 关于您的开头段落,4Js Genero 有付费支持模式。矛盾的是,您不会在这里看到很多 4Js Genero 问题,因为它们应该 1. 由您当地的支持联系人和 2. 我们的开发人员论坛回答。然后,这在使用 Stack Overflow 帖子数量等度量的语言流行度度量中对我们不利。
好吧,这似乎更像是一个 Genero 问题,它处理网络视图的方式是将虚拟键盘放在网络内容上,而不是在其中。我们把它带到了他们的论坛,他们正在调查它。
这是一个纯粹的 Genero 问题,据我所知,此后已得到修复。