缩放 Android WebView 文本 html 以适应?
Scaling an Android WebView text html to fit?
我有一个数学方程式作为文本 WebView,无论其尺寸如何,我都需要适合整个屏幕。我这样做的第一个直觉就是在文本超出范围时简单地缩小文本,以便它保持约束, 但是,我找不到任何函数或方法来实际测量该 webview 的内容,我试过:
webview.getMeasuredHeight, webview.getHeight
但它们的问题是它们总是贴在 webview 小部件的大小上,而不是内容上,所以我搬到了:
webview.getContentHeight
这似乎有效,问题是它仅在文本为 "loaded" 后才有效,因此即使在 onPageFinished 中调用它,一开始也没有得到正确的答案。
我的问题是:
1) 有没有办法知道 TEXTUAL html webview 的内容大小?我什至希望知道指示大小的滚动条长度。
2) 是否有一个侦听器函数可以让我从文本实际加载的那一刻起就可以 运行 编码? webview 声明看起来像这样:
webView = (WebView) findViewById(R.id.webView);
js = "<html><head>"
+ "<link rel='stylesheet' href='file:///android_asset/mathscribe/jqmath-0.4.3.css'>"
+ "<script src='file:///android_asset/mathscribe/jquery-1.4.3.min.js'></script>"
+ "<script src='file:///android_asset/mathscribe/jqmath-etc-0.4.3.min.js'></script>"
+ "</head><body>"
+ "<script>var s = '$$" + functext + "$$';M.parseMath(s);document.write(s);</script> </body>";
webView.loadDataWithBaseURL("", js, "text/html", "UTF-8", "");
文本不会立即加载,因此与其相关的代码通常存在缺陷。
3) 有没有webview.getContentWidth之类的?
编辑:
此代码可以帮助您使网页适合 webview。
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
您必须计算比例以使内容适合屏幕。
private int getScale()
{
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
Double val = new Double(width)/new Double(Your_webpage_width);
val = val * 100d;
return val.intValue();
}
然后使用
WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
2) 运行 webview 完全加载后,只需实现 WebViewClient 并扩展 onPageFinished() 如下:
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
// do your stuff here
}
});
我有一个数学方程式作为文本 WebView,无论其尺寸如何,我都需要适合整个屏幕。我这样做的第一个直觉就是在文本超出范围时简单地缩小文本,以便它保持约束, 但是,我找不到任何函数或方法来实际测量该 webview 的内容,我试过:
webview.getMeasuredHeight, webview.getHeight
但它们的问题是它们总是贴在 webview 小部件的大小上,而不是内容上,所以我搬到了:
webview.getContentHeight
这似乎有效,问题是它仅在文本为 "loaded" 后才有效,因此即使在 onPageFinished 中调用它,一开始也没有得到正确的答案。
我的问题是:
1) 有没有办法知道 TEXTUAL html webview 的内容大小?我什至希望知道指示大小的滚动条长度。
2) 是否有一个侦听器函数可以让我从文本实际加载的那一刻起就可以 运行 编码? webview 声明看起来像这样:
webView = (WebView) findViewById(R.id.webView);
js = "<html><head>"
+ "<link rel='stylesheet' href='file:///android_asset/mathscribe/jqmath-0.4.3.css'>"
+ "<script src='file:///android_asset/mathscribe/jquery-1.4.3.min.js'></script>"
+ "<script src='file:///android_asset/mathscribe/jqmath-etc-0.4.3.min.js'></script>"
+ "</head><body>"
+ "<script>var s = '$$" + functext + "$$';M.parseMath(s);document.write(s);</script> </body>";
webView.loadDataWithBaseURL("", js, "text/html", "UTF-8", "");
文本不会立即加载,因此与其相关的代码通常存在缺陷。
3) 有没有webview.getContentWidth之类的?
编辑:
此代码可以帮助您使网页适合 webview。
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
您必须计算比例以使内容适合屏幕。
private int getScale()
{
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
Double val = new Double(width)/new Double(Your_webpage_width);
val = val * 100d;
return val.intValue();
}
然后使用
WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
2) 运行 webview 完全加载后,只需实现 WebViewClient 并扩展 onPageFinished() 如下:
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
// do your stuff here
}
});