大家好,我正在创建 epub 阅读器并在 android webview 中加载这本书
并且还使 webview 水平移动参考this https://stackoverflow.com/questions/36617345/use-horizontal-scroll-in-android-webview/36628228?noredirect=1#comment67688154_36628228但现在我想让 webview 像页面一样移动,所以我想这样做
1.计算总水平滚动宽度和屏幕宽度,然后将它们相除以获得总页数
2.锁定webview的滚动,当用户滑动时,将webview的滚动设置为screenwidth*swipeCount
现在的问题是,当我尝试获取totalHorizontalScrollWidth时,它给出了屏幕宽度,我尝试了这些方法,但都给出了相同的结果
第一种方法
ViewTreeObserver vto = webView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
webView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Log.e("ScrollWidth",""+webView.getMeasuredWidth());
Toast.makeText(getApplicationContext(), "new Width is"+webView.getMeasuredWidth(), Toast.LENGTH_SHORT).show();
}
});
返回 480 屏幕宽度
和第二种方法
public class WebViewWidth extends WebView {
public WebViewWidth(Context context) {
super(context);
}
public WebViewWidth(Context context, AttributeSet attrs) {
super(context, attrs);
}
public int getContentWidth()
{
return this.computeHorizontalScrollRange();
}
public int getContentHeight()
{
return this.computeVerticalScrollRange();
}
}
并使用此 webView 来获取computeHorizontalScrollRange,如下所示
private class MyWebViewClient extends WebViewClient {
private Context mContext;
public MyWebViewClient(Context context) {
this.mContext = context;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
mProgressDialog.dismiss();
final WebView myWebView = (WebView) view;
String varMySheet = "var mySheet = document.styleSheets[0];";
String addCSSRule = "function addCSSRule(selector, newRule) {"
+ "ruleIndex = mySheet.cssRules.length;"
+ "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);"
+ "}";
String insertRule1 = "addCSSRule('html', 'padding: 0px; height: "
+ (myWebView.getMeasuredHeight() / mContext.getResources().getDisplayMetrics().density)
+ "px; -webkit-column-gap: 0px; -webkit-column-width: "
+ myWebView.getMeasuredWidth() + "px;')";
myWebView.loadUrl("javascript:" + varMySheet);
myWebView.loadUrl("javascript:" + addCSSRule);
myWebView.loadUrl("javascript:" + insertRule1);
super.onPageFinished(view, url);
int widthis = webView.getContentWidth();
Toast.makeText(getApplicationContext(), "Width is"+widthis, Toast.LENGTH_SHORT).show();
Log.i("WidthTotoal Scroll", ""+widthis);
}
}
即使这样,结果也是 480,即屏幕尺寸
我也遇到过这个脚本,但不知道如何从这个脚本获取值到android
String js = ""+
"var desiredHeight;"+
" var desiredWidth;"+
" var bodyID = document.getElementsByTagName('body')[0];"+
" totalHeight = bodyID.offsetHeight;"+
"pageCount = Math.floor(totalHeight/desiredHeight) + 1;"+
" bodyID.style.padding = 10;"+ //(optional) prevents clipped letters around the edges
" bodyID.style.width = desiredWidth * pageCount;"+
" bodyID.style.height = desiredHeight;"+
" bodyID.style.WebkitColumnCount = pageCount;";
有人请帮助我获得 webview 的最大水平滚动宽度或一些替代方法来获得像翻页这样的效果。