Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何根据屏幕大小将Epub Html拆分为页面_Android_Webview_Pagination_Epub - Fatal编程技术网

Android 如何根据屏幕大小将Epub Html拆分为页面

Android 如何根据屏幕大小将Epub Html拆分为页面,android,webview,pagination,epub,Android,Webview,Pagination,Epub,我正在开发一个Android应用程序,可以阅读电子书(epub格式),目前我正在使用Paul Siegeman的epublib库,它确实是一个非常好的epub阅读器,但它有一些限制,例如,我需要的限制是,你不能水平移动页面(就像阅读真正的书籍一样),所以我需要自己实现它,但是我被卡住了 实际读取epub然后将其放入webview的方法如下: private void openEpub(String bookFilename){ WebView webView = (WebView) f

我正在开发一个Android应用程序,可以阅读电子书(epub格式),目前我正在使用Paul Siegeman的epublib库,它确实是一个非常好的epub阅读器,但它有一些限制,例如,我需要的限制是,你不能水平移动页面(就像阅读真正的书籍一样),所以我需要自己实现它,但是我被卡住了

实际读取epub然后将其放入webview的方法如下:

private void openEpub(String bookFilename){

    WebView webView = (WebView) findViewById(R.id.webView);

    nl.siegmann.epublib.domain.Book book=null;
    try {
        book = (new EpubReader()).readEpub(new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/" + bookFilename));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    String baseUrl = Environment.getExternalStorageDirectory().getPath() + "/";
    String data=null;
    try {
        data = new String(book.getContents().get(1).getData());
    } catch (IOException e) {
        e.printStackTrace();
    }
    webView.loadDataWithBaseURL(baseUrl, data, "text/html", "UTF-8", null);

}
如你所见,我在webview中显示电子书,据我所知,webview提供的唯一滚动可能性是向上/向下

我在考虑将getData()返回的html字符串和webview加载的html字符串拆分为页面,并使用viewpager逐个显示它们,但是如何根据屏幕大小正确拆分html呢

你认为我的想法对吗?是否有其他从左到右/从右到左(分页)显示epub的解决方案或其他“免费或便宜”的库?(我试过PageTurner,它真的很好,但是商业版对我来说太贵了)

关注这个账户

FbReader为epub和pdf阅读器提供了一些很棒的库。试试这个

通过扩展WebView,您可以创建自己的自定义WebView。在这里,您可以从WebView中放置和修改所需的所有功能


我的同事用这台FbReader制作了一台阅读器,非常棒。

嘿,我想这会对你有所帮助。Nacho的答案对我有用。这里?

我在android上做过这样的分页效果

->创建自定义webview类。
->设置下面的客户端并加载url,然后您将获得页面计数的水平滚动。
->锁定webview默认滚动条。
->要使分页效果平滑,而不是移动webview的滚动,请移动整个webview,使一个页面有一个webview。
->使用您自己的查看器缓冲上一页和下一页。


我已经完成了所有这些实现,我为一个组织做了一个产品。我只是分享我的想法,如何接近最好的解决方案,而不是使用第三个PARIs和Stukin在中间,由于SDK的限制,使每件事都属于你自己。

private class MyWebClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {

            super.onPageStarted(view, url, favicon);
        }
        @Override
        public void onPageFinished(WebView view, String url) 
        {
            super.onPageFinished(view, url);

            final MyWebView myWebView = (MyWebView) 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()/getContext().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);




        }
    }

    private class MyWebChromeClient extends WebChromeClient
    {
        @Override
        public void onProgressChanged(WebView view, int newProgress) 
        {
            super.onProgressChanged(view, newProgress);

            if(newProgress == 100)
            {
                postDelayed(new Runnable() 
                {
                    @Override
                    public void run() 
                    {
                        calculateNoOfPages();
                    }       

                },200);
            }
        }
    }
private void calculateNoOfPages()
    {
        if(GlobalSettings.EPUB_LAYOUT_TYPE == GlobalConstants.FIXED)
        {

        }
        else
        {
            if(getMeasuredWidth() != 0)
            {
                int newPageCount = computeHorizontalScrollRange()/getMeasuredWidth();
                getData().getChapterVO().setPageCount(newPageCount);

            }
        }
    }
@Override
    public int computeHorizontalScrollRange() {
        // TODO Auto-generated method stub
        return super.computeHorizontalScrollRange();
    }

一个你加载url到

非常感谢Jatin,最后,在没有找到解决我问题的方法之后,因为这是一个重要的项目,我决定买一个阅读器。现在我使用的是Page Turner Reader,它不是免费的,但它只是一个惊人的应用程序。非常感谢atihska,正如我在下面为Jatin所说的那样,在没有找到解决方案的情况下,我决定购买一个阅读器,而现在我使用的是Page Turner Reader,它不是免费的,但它只是一个惊人的应用程序。@Atishka,我测试了你的建议,它工作正常。我不擅长js,所以你能告诉我如何通过点击或滚动来更改页面吗?如果你能给我一个提示,我将不胜感激。兄弟,最后通牒……我真的在寻找一周的解决办法。最后通牒兄弟,你真的为我解决了一个该死的问题。但愿我能给你100英镑。任何寻求解决方案的人,上述方法都是完美的。您可能需要稍微更改addCSS规则,但解决方案确实有效。谢谢兄弟银行的评论!!非常感谢您抽出时间,我会尽我所能尝试一下,但您认为您的解决方案容易实现吗?(我在办公室的时候读得很快)这是真的。我刚刚开始开发,并能够拿起它。我建议你试试看,很简单。我可以尽可能多地帮助你们,我已经集成了这个,并在WebView中进行了水平滚动,现在我可以水平阅读这本书了。但你们能告诉我,我如何为每个新页面集成viewflipper?