在我的应用程序中,我在WebView中加载了一个HTML页面。我正在实现一个switchView按钮,它使用不同的语言加载相同的页面。我希望在切换语言时保持WebView的滚动位置。经过对SO的一些研究,我已经实现了以下内容。
这是第一个WebView
switchB = (Button)findViewById(R.id.button1);
webView = (WebView) findViewById(R.id.page1);
webView.loadUrl("file:///android_asset/try.html");
switchB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent = new Intent (MainActivity.this, SwitchedView.class);
mIntent.putExtra("scroll", calculateProgression(webView));
startActivity(mIntent);
}
});
}
private float calculateProgression(WebView content) {
float positionTopView = content.getTop();
float contentHeight = content.getContentHeight();
float currentScrollPosition = content.getScrollY();
float percentWebview = (currentScrollPosition - positionTopView) / contentHeight;
return percentWebview;
}
有了这个,我将Scroll传递给下一个Activity,它是一个加载同一页面的WebView。
Intent i = getIntent();
Bundle extras = i.getExtras();
float scrollp = extras.getFloat("scroll");
WebView webView = (WebView) findViewById(R.id.page2);
webView.loadUrl("file:///android_asset/try2.html");
float webviewsize = webView.getContentHeight() - webView.getTop();
float positionInWV = webviewsize * scrollp;
int positionY = Math.round(webView.getTop() + positionInWV);
webView.scrollTo(0, positionY);
这不是将滚动位置设置为传递的滚动位置。我做错了吗?
答案 0 :(得分:4)
webView.loadUrl( “文件:///android_asset/try2.html”);是异步的,因此scrollTo将在页面加载之前执行。因此,只有在页面加载成功后才需要调用scrollTo。您可以通过以下代码段实现此目的。
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.scrollTo(0, positionY);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
//error
}
});