1

WebViewのリソースアセットからhtmlページを表示するアプリケーションがあります。WebViewは、ページ上のナビゲーションリンクを許可するために選択され、すべてのナビゲーションアクションは、新しいページ要求を中断して必要なローカルアセットを返すことにより、WebViewClientクラスで処理されます。WebViewを含むアクティビティは、縦向きと横向きの両方をサポートし、WebViewは「onCreate」で構成されます(「setInitialScale」および「WebSettings」)。ページは幅の内側に収まるように表示され、垂直方向にスクロールできます。これは、ICSが更新されるまで正常に機能していました。

ICSでは、選択した最初のページは以前と同じように表示されますが、表示されるそれ以降のページリンクは、画面の幅よりも広くなります(水平スクロールバーが含まれます)。これは、最初のページが読み込まれたときにデバイスが縦向きまたは横向きの場合に発生します。デバイスを横向きに回転させて縦向きに戻すと問題は解決しますが(表示されたページが最初のページであるかのようにアクティビティが再読み込みされます)、縦向きで前のページに戻ると、幅が再び正しく表示されていたプライマリページに戻っても、デバイスは表示されます。

これは主に煩わしいことですが、一貫性のない動作が心配です。残念ながら、このコードには他にもいくつかの「微調整」があります(主に、画面に合わせてHTML内の画像のサイズを変更し、向きが変わってもWebViewのスクロール位置を維持します)。これらは現在の問題の原因である可能性がありますが、結果のクイックログ出力は、それらが期待どおりに機能していることを示しており、ICSWebViewの動作が変更されたことを示しています。

私は直接の参照を見つけることなく問題の同様の投稿を検索したので、私の質問は本当にオープンです。他の誰かがICSWebViewクラスでこのようなものを見たことがありますか、または変更された動作の別のソースを探す必要がありますか?

アップデート:

コードの1行を何時間も(grrrr)削除した後、問題を特定しました。

android api 14以降で実行している場合、ビューポートがデバイス幅に固定されているときに「setInitialScale」でビュースケールを100%より大きい値に設定した後、WebViewは予測できない動作をします(メタタグname = "viewport" content =を使用) htmlcssの"width= device-width")。最初のページの読み込みはデバイスの幅を尊重しているように見えますが、その後のページの読み込みは、ほぼランダムに、要求されたよりも広いビューポートでレンダリングされる場合とされない場合があります。

これは予想される動作である可能性がありますが、予測不可能性はそうではないことを示唆しています(そうである場合は、以前のバージョンでの動作からの修正です)。

使用されたコードは、ユーザーが設定でテキスト表示サイズを調整できるようにスケールを設定し、ページが読み込まれる前にページ画像のサイズをコードの値に「固定」していました。これは、ページスケールを100%に維持し、「WebSettings.setDefaultFontSize」を使用してユーザーの設定からテキストサイズを設定することで置き換えられ、レンダリングの問題が解消されました。

4

0 に答える 0