题
简单来说:我想在WebView中显示的HTML文件中添加当前位置(可能几个位置),以便以后还原它。任何小提示都会有所帮助。:)
解决方案
如果以“当前位置”你在给定的页面意味着一个点的地方,我不相信这是可能的......至少不是从纯Java。暴露到Java的整个的WebKit API缺乏的东西,随着网页内容涉及了。
如果你有在页面内容的控制,并有一个办法可以知道通过在页面的JavaScript这些位置,您可以:
步骤#1:使用WebView#addJavascriptInterface()
与某种recordPosition()
方法的添加对象,保存信息,无论是适当
步骤#2:创建一个Javascript函数调用被注入的对象上recordPosition()
和然后:
步骤#3A:触发器,从Javascript本身Javascript函数(例如,基于一个点击),或者
步骤#3B:在你的loadUrl("javascript:...");
,其中WebView
由Javascript代码替换以触发从步骤#2中的Javascript函数调用...
恢复这些职位将不得不工作几乎相同的方式:的JavaScript做实际的恢复,可能是由Java代码触发
。请注意,我不知道,如果你想要什么(获取/设置当前位置),可从Javascript,因为我没有太多的在浏览器中编码的。
其他提示
我采取的方法如下:
在里面 onSaveInstanceState()
方法,计算用户向下滚动页面的距离。
int contentHeight = webView.getContentHeight();
int scrollY = webView.getScrollY();
float scrollPercent = ((float) scrollY / ((float) contentHeight));
把它藏在包里。恢复页面时 onCreate()
方法,等待页面完成加载(在 WebClient.onPageFinished()
),滚动到记录位置:
int contentHeight = webView.getContentHeight();
int y = (int) ((float) contentHeight * scrollPercent);
webView.scrollTo(0, y);
- 用一个
float
并在横向和纵向之间翻转的情况下计算比率。 - 可以工作 足够好 但不是 完美 与自动调整大小的图像混合时。
- 还可以考虑规模。我倾向于将比例隐藏在偏好中
onPause()
方法,然后webView.setInitialScale(scale)
在开始加载页面之前。 - 我发现将网络视图设置为不可见时
scrollPercent > 0
看起来好多了。
不隶属于 StackOverflow