7

簡単に言うと、WebView に表示される html ファイルの現在の位置 (おそらく複数の位置) をブックマークして、後で復元したいと考えています。どんな小さなヒントでも役に立ちます。:)

4

2 に答える 2

6

「現在の位置」が特定のページのどこかのポイントを意味する場合、それが可能であるとは思わない...少なくとも純粋にJavaからではない。Javaに公開されているWebKitAPI全体には、ページのコンテンツを処理するものがほとんどありません。

ページのコンテンツを制御でき、ページ内のJavascriptを介してこれらの位置を知る方法がある場合は、次のことができます。

ステップ1:WebView#addJavascriptInterface()ある種のrecordPosition()メソッドでオブジェクトを追加し、適切な場所に情報を保存するために使用します

recordPosition()ステップ2:注入されたオブジェクトを呼び出すJavascript関数を作成します。

そして次のいずれか:

ステップ3a:Javascript自体からJavascript関数をトリガーする(たとえば、クリックに基づいて)、または

ステップ#3b:loadUrl("javascript:...");を呼び出しますWebView。ここで、...をJavascriptコードに置き換えて、ステップ#2のJavascript関数をトリガーします。

これらの位置の復元は、ほとんど同じように機能する必要があります。Javascriptに実際の復元を実行させ、場合によってはJavaコードによってトリガーされます。

私はブラウザ内のコーダーではないので、Javascriptから必要なもの(現在の位置を取得/設定)が利用できるかどうかはわかりません。

于 2009-07-06T11:29:37.633 に答える
6

私が取ったアプローチは次のとおりです。

この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 ビューを非表示に設定することがわかりました。
于 2009-08-03T20:52:12.343 に答える