0

stackoverflowに関するいくつかのQ&Aを読んだことから、webviewがepubファイルを表示するための良いオプションである可能性があることを理解しています。

次のスレッドでは、Webビューでもハイライトできると述べています。 AndroidでePubブックをレンダリングしますか?

Webビューでテキストを強調表示する方法について誰かに教えてもらえますか?次のスレッドで約2か月前に尋ねられた同様の質問がありますが、まだ回答を受け取っていません。 https://stackoverflow.com/questions/12948352/highlight-unhighlight-some-text-permanently-in-epub-file-in-android

AndroidでePubリーダーのハイライト機能を実装する方法を理解するのを手伝ってください。ありがとうございました。

4

2 に答える 2

2
         webview.findAll(htmlTextStr);
         webview.setSelected(true);
         webview.findNext(true);

これを試してください。 htmlTextStr は強調表示されるテキストでなければなりません

于 2013-02-12T04:54:09.760 に答える
1
AndroidおよびiOS用のネイティブepubプレーヤーの開発に関する私の経験に基づいて、この回答を提供しています。
私はこのようにしてそれを達成しました。

これは私がテキストの強調表示を行った方法です

-onloadコールバックでURLがwebviewに読み込まれたら、このようにjquery libをwebview domに注入します


    プライベートボイド addJQueryJS()
        {
            文字列パス = "file:///android_asset/JSLibraries/jquery.min.js";
            String data = "{\"MethodName\":\"onJQueryJSLoaded\",\"MethodArguments\":{}}";
            文字列 callBackToNative = " jsInterface.callNativeMethod('jstoobjc:"+data+"');";
            文字列スクリプト = "関数 includeJSFile()"
                                   +"{"
                                   +"関数 loadScript(url, コールバック)"
                                   +"{"
                                   +"var script = document.createElement('script');"
                                   +"script.type = 'text/javascript';"
                                   +"script.onload = 関数 () {"
                                   +"コールバック();"
                                   +"};"
                                   +"script.src = url;"
                                   +"if(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0])"
                                   +"{"
                                   +"(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);"
                                   +"}"
                                   +"else { コールバック(); }"
                                   +"}"
                                   +"loadScript('"+パス+"', 関数 ()"
                                   +"{"
                                   +callBackToNative
                                   +"});"
                                   +"} ; includeJSFile();";
            loadUrl("javascript: "+script);
        }

各単語を一意の ID を持つスパンにラップします

次にjsファイルを作成し、jqueryと同じように注入し、そこにタッチメソッドを書き込みます


    関数 onTouchMove(e)
    {
        e.preventDefault();
        if(((touchendStartStick == true || touchendEndStick == true) && currHVO != 未定義)
        {
            var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
            var obj = document.elementFromPoint(touch.pageX-window.pageXOffset,touch.pageY-window.pageYOffset);

            if($(obj).is('span'))
            {
                $(obj).css('背景色','rgba(0,0,255,0.3)');
            }
        }
    };


単語の x、y 幅、高さの値も取得できるため、ネイティブ ビューでドラッグ可能なピンの開始、終了を表示できます。

ハイライトの最初と最後の単語 ID を db または永続的なストレージに保存することで、ハイライトを保存できます。次にユーザーが本を開いたときに、それらの単語 ID を取得し、それらのスパンを強調表示します。

于 2014-08-08T07:13:50.310 に答える