我们正在构建混合Razor HTML5 / Xamarin Android应用程序。在Android.Webkit.WebView本身中的视图呈现工作得很好,并且我们设计了许多适当的表单,但是在单个视图中执行javascript的性能存在问题。
我将尝试描述正在发生的事情。我们将其称为webview,使用特定于视图的模型生成razor html模板。之后,我们使用有效的“ LoadDataWithBaseUrl”调用视图。该视图由webview控件加载。现在,我将尝试使用在视图中实现的按钮。按钮的onclick处理程序在javascript的views header部分script标签中实现。实施示例:
...
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事件处理程序,但似乎没有任何效果。没有人知道如何解决该问题?
答案 0 :(得分:0)
我找到了解决方案。原因是设置了“ system_ui_flag_hide_navigation”。我不知道为什么会出现这种副作用,但是在删除该行之后,它就起作用了。万一其他人也遇到了这个问题。