Android WebView - activity 启动后忽略第一次点击/触摸
Android WebView - First click / touch is ignored after activity started
我们正在构建混合 Razor HTML5/Xamarin Android 应用程序。 Android.Webkit.WebView 中视图的呈现本身工作得很好,我们有许多设计正确的表单,但是我们在单个视图中执行 javascript 时遇到了性能问题。
我将尝试描述正在发生的事情。我们调用 webview,生成具有视图特定模型的 razor html 模板。之后我们用 "LoadDataWithBaseUrl" 调用视图,它有效。视图由 webview 控件加载。现在我将尝试使用在视图中实现的按钮。按钮的 onclick 处理程序在 javascript 中的视图 header 部分脚本标记中实现。示例实现:
...
function ClearInput() {
var input = document.getElementById('page-text-input');
input.value = "";
}
...
<input type="button" class="numeric-input-function" onclick="ClearInput();"/>
出现的问题是我们不能在视图被webview控件渲染后直接使用按钮。 javascript 似乎不能直接使用。在此过程中第一次单击按钮不会引发单击事件。第二次单击和后续的工作。
由于这种不当行为,我们限制了可用性。
澄清一下:用户看到了视图但无法正常操作,因为第一次点击的点击事件未被识别。
是否还有其他人遇到相同类型的问题或该问题的解决方案?
编辑:
我们试图在表单未完全加载时使用加载屏幕禁用表单,但这不是我们正在寻找的解决方案。问题仍然存在。
似乎 webview 没有专注于开始,需要第一次点击来设置焦点。
编辑 2:
我进行了更多测试,发现每次调用 webview 时输入通道在构建后立即被销毁。相应的调试输出如下所示:
08-16 16:50:01.583 D/InputTransport(31313): Input channel constructed: fd=144
08-16 16:50:01.583 D/InputTransport(31313): Input channel destroyed: fd=132
08-16 16:50:03.813 D/Mono (31313): GC_BRIDGE waiting for bridge processing to finish
08-16 16:50:03.856 I/art (31313): Starting a blocking GC Explicit
08-16 16:50:03.894 I/art (31313): Explicit concurrent mark sweep GC freed 18081(2MB) AllocSpace objects, 87(4MB) LOS objects, 14% free, 91MB/107MB, paused 559us total 38.349ms
08-16 16:50:03.927 D/Mono (31313): GC_TAR_BRIDGE bridges 6498 objects 8686 opaque 242 colors 6492 colors-bridged 6479 colors-visible 6479 xref 101 cache-hit 0 cache-semihit 0 cache-miss 13 setup 0.72ms tarjan 7.96ms scc-setup 2.09ms gather-xref 0.36ms xref-setup 0.07ms cleanup 0.76ms
08-16 16:50:03.927 D/Mono (31313): GC_BRIDGE: Complete, was running for 114.00ms
08-16 16:50:03.927 D/Mono (31313): GC_MAJOR: (LOS overflow) time 102.71ms, stw 104.75ms los size: 27552K in use: 23334K
08-16 16:50:03.927 D/Mono (31313): GC_MAJOR_SWEEP: major size: 10240K in use: 8427K
08-16 16:50:07.126 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): Relayout returned: oldFrame=[0,0][2048,1536] newFrame=[0,0][2048,1536] result=0x1 surface={isValid=true -913786880} surfaceGenerationChanged=false
08-16 16:50:08.112 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 0
08-16 16:50:08.215 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 1
08-16 16:50:08.732 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 0
08-16 16:50:08.800 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 1
08-16 16:50:08.818 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.824 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.828 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.831 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
编辑 3:
我尝试了不同的标志、focusable 和 focusableInTouchMode 的设置以及 ontouch / onfocuschanged 事件处理程序,但似乎没有任何效果。没有人知道如何解决这个问题?
我找到了解决办法。原因是设置了"system_ui_flag_hide_navigation"。我不知道为什么会出现这种副作用,但是在我删除该行后,它起作用了。以防其他人也遇到这个问题。
我们正在构建混合 Razor HTML5/Xamarin Android 应用程序。 Android.Webkit.WebView 中视图的呈现本身工作得很好,我们有许多设计正确的表单,但是我们在单个视图中执行 javascript 时遇到了性能问题。
我将尝试描述正在发生的事情。我们调用 webview,生成具有视图特定模型的 razor html 模板。之后我们用 "LoadDataWithBaseUrl" 调用视图,它有效。视图由 webview 控件加载。现在我将尝试使用在视图中实现的按钮。按钮的 onclick 处理程序在 javascript 中的视图 header 部分脚本标记中实现。示例实现:
...
function ClearInput() {
var input = document.getElementById('page-text-input');
input.value = "";
}
...
<input type="button" class="numeric-input-function" onclick="ClearInput();"/>
出现的问题是我们不能在视图被webview控件渲染后直接使用按钮。 javascript 似乎不能直接使用。在此过程中第一次单击按钮不会引发单击事件。第二次单击和后续的工作。
由于这种不当行为,我们限制了可用性。 澄清一下:用户看到了视图但无法正常操作,因为第一次点击的点击事件未被识别。
是否还有其他人遇到相同类型的问题或该问题的解决方案?
编辑: 我们试图在表单未完全加载时使用加载屏幕禁用表单,但这不是我们正在寻找的解决方案。问题仍然存在。 似乎 webview 没有专注于开始,需要第一次点击来设置焦点。
编辑 2: 我进行了更多测试,发现每次调用 webview 时输入通道在构建后立即被销毁。相应的调试输出如下所示:
08-16 16:50:01.583 D/InputTransport(31313): Input channel constructed: fd=144
08-16 16:50:01.583 D/InputTransport(31313): Input channel destroyed: fd=132
08-16 16:50:03.813 D/Mono (31313): GC_BRIDGE waiting for bridge processing to finish
08-16 16:50:03.856 I/art (31313): Starting a blocking GC Explicit
08-16 16:50:03.894 I/art (31313): Explicit concurrent mark sweep GC freed 18081(2MB) AllocSpace objects, 87(4MB) LOS objects, 14% free, 91MB/107MB, paused 559us total 38.349ms
08-16 16:50:03.927 D/Mono (31313): GC_TAR_BRIDGE bridges 6498 objects 8686 opaque 242 colors 6492 colors-bridged 6479 colors-visible 6479 xref 101 cache-hit 0 cache-semihit 0 cache-miss 13 setup 0.72ms tarjan 7.96ms scc-setup 2.09ms gather-xref 0.36ms xref-setup 0.07ms cleanup 0.76ms
08-16 16:50:03.927 D/Mono (31313): GC_BRIDGE: Complete, was running for 114.00ms
08-16 16:50:03.927 D/Mono (31313): GC_MAJOR: (LOS overflow) time 102.71ms, stw 104.75ms los size: 27552K in use: 23334K
08-16 16:50:03.927 D/Mono (31313): GC_MAJOR_SWEEP: major size: 10240K in use: 8427K
08-16 16:50:07.126 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): Relayout returned: oldFrame=[0,0][2048,1536] newFrame=[0,0][2048,1536] result=0x1 surface={isValid=true -913786880} surfaceGenerationChanged=false
08-16 16:50:08.112 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 0
08-16 16:50:08.215 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 1
08-16 16:50:08.732 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 0
08-16 16:50:08.800 D/ViewRootImpl@22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 1
08-16 16:50:08.818 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.824 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.828 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.831 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
编辑 3: 我尝试了不同的标志、focusable 和 focusableInTouchMode 的设置以及 ontouch / onfocuschanged 事件处理程序,但似乎没有任何效果。没有人知道如何解决这个问题?
我找到了解决办法。原因是设置了"system_ui_flag_hide_navigation"。我不知道为什么会出现这种副作用,但是在我删除该行后,它起作用了。以防其他人也遇到这个问题。