簡単に言うと、WebView に表示される html ファイルの現在の位置 (おそらく複数の位置) をブックマークして、後で復元したいと考えています。どんな小さなヒントでも役に立ちます。:)
2 に答える
「現在の位置」が特定のページのどこかのポイントを意味する場合、それが可能であるとは思わない...少なくとも純粋にJavaからではない。Javaに公開されているWebKitAPI全体には、ページのコンテンツを処理するものがほとんどありません。
ページのコンテンツを制御でき、ページ内のJavascriptを介してこれらの位置を知る方法がある場合は、次のことができます。
ステップ1:WebView#addJavascriptInterface()
ある種のrecordPosition()
メソッドでオブジェクトを追加し、適切な場所に情報を保存するために使用します
recordPosition()
ステップ2:注入されたオブジェクトを呼び出すJavascript関数を作成します。
そして次のいずれか:
ステップ3a:Javascript自体からJavascript関数をトリガーする(たとえば、クリックに基づいて)、または
ステップ#3b:loadUrl("javascript:...");
を呼び出しますWebView
。ここで、...
をJavascriptコードに置き換えて、ステップ#2のJavascript関数をトリガーします。
これらの位置の復元は、ほとんど同じように機能する必要があります。Javascriptに実際の復元を実行させ、場合によってはJavaコードによってトリガーされます。
私はブラウザ内のコーダーではないので、Javascriptから必要なもの(現在の位置を取得/設定)が利用できるかどうかはわかりません。
私が取ったアプローチは次のとおりです。
このonSaveInstanceState()
メソッドでは、ユーザーがページをどれだけ下にスクロールしたかを計算します。
int contentHeight = webView.getContentHeight();
int scrollY = webView.getScrollY();
float scrollPercent = ((float) scrollY / ((float) contentHeight));
それをバンドルに隠します。メソッドでページを復元する場合は、ページのonCreate()
読み込みが完了するまで待ち( でWebClient.onPageFinished()
)、記録された位置までスクロールします。
int contentHeight = webView.getContentHeight();
int y = (int) ((float) contentHeight * scrollPercent);
webView.scrollTo(0, y);
- を使用し
float
て比率を計算すると、横向きと縦向きの間で反転する場合に機能します。 - 自動サイズ変更画像と組み合わせると、十分に機能する可能性がありますが、完全には機能しません。
- スケールも考慮に入れることができる。
onPause()
メソッドの設定でスケールを隠してからwebView.setInitialScale(scale)
、ページの読み込みを開始する傾向があります。 scrollPercent > 0
見栄えがよくなったら、Web ビューを非表示に設定することがわかりました。