11

WebViewを子として含むギャラリーがあります。ギャラリーをスクロールすると、次の警告が表示されます。

'04-07 19:35:37.409: WARN/webcore(664): Can't get the viewWidth after the first layout
 04-07 19:35:37.470: WARN/webcore(664): skip viewSizeChanged as w is 0'

この警告は何を指しますか?[レイアウトパラメータをハードコーディングしていません。]

この警告が発生する理由についての光は本当に役に立ちます...

そしてこれらも印刷されました

04-15 11:10:13.202: DEBUG/webviewglue(617): nativeDestroy view: 0x257f40
04-15 11:10:13.243: DEBUG/webviewglue(617): nativeDestroy view: 0x25d680
04-15 11:10:13.292: DEBUG/webviewglue(617): nativeDestroy view: 0x240688
04-15 11:10:13.332: DEBUG/webviewglue(617): nativeDestroy view: 0x249918
04-15 11:10:13.373: DEBUG/webviewglue(617): nativeDestroy view: 0x226608
04-15 11:10:13.423: DEBUG/webviewglue(617): nativeDestroy view: 0x21e418
04-15 11:10:13.482: DEBUG/webviewglue(617): nativeDestroy view: 0x23a4e8
04-15 11:10:13.533: DEBUG/webviewglue(617): nativeDestroy view: 0x235c68
04-15 11:10:13.572: DEBUG/webviewglue(617): nativeDestroy view: 0x212a28

前もって感謝します。

4

2 に答える 2

1

通常のWebビューが機能しないという同じ問題があり、説明したのと同じエラーが発生しました。

skip viewSizeChanged as w is 0

私が理解しているように、これは Android ズームに関係しています。新しいデバイスでは、アプリケーション (携帯電話用に設計されたもの) がタブレットなどで小さなウィンドウ アプリケーションとして表示されるのを防ぐことができます。

私の解決策:

WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setBuiltInZoomControls(true);

最後の行 setBuiltInZoomControls(true) により、問題が解消されました。これがお役に立てば幸いです。

[編集]このソリューションは昨日はうまくいきましたが、今朝は再びエラーが発生しました。これはおそらく解決策ではありません。誤解を招く投稿で申し訳ありません。

[EDIT2]コードを変更しましたが、その後エラーは発生していません。1000回の反復のテストスイートを問題なく実行しました。私の問題を解決したのは、URL が webview に正しく渡されなかったことです。問題が解消された正しいURLを確認した後、空の文字列を取得しました。うまくいけば、これは誰かを助けるでしょう。

于 2011-12-06T15:03:56.903 に答える
1

viewSize が変更され、何らかの理由で幅の値が 0 になっていることを通知しています (おそらくズーム)。ここに見られるように:

// notify webkit that our virtual view size changed size (after inv-zoom)
            private void viewSizeChanged(int w, int h, int textwrapWidth,
                    float scale, int anchorX, int anchorY, boolean ignoreHeight) {
                if (DebugFlags.WEB_VIEW_CORE) {
                    Log.v(LOGTAG, "viewSizeChanged w=" + w + "; h=" + h
                            + "; textwrapWidth=" + textwrapWidth + "; scale="
                            + scale);
                }
                if (w == 0) {
                    Log.w(LOGTAG, "skip viewSizeChanged as w is 0");
                    return;
                }
                int width = w;
                if (mSettings.getUseWideViewPort()) {
                    if (mViewportWidth == -1) {
                        if (mSettings.getLayoutAlgorithm() == WebSettings.LayoutAlgorithm.NORMAL) {
                            width = WebView.DEFAULT_VIEWPORT_WIDTH;
                        } else {
                            /*
                             * if a page's minimum preferred width is wider than the
                             * given "w", use it instead to get better layout result. If
                             * we start a page with MAX_ZOOM_WIDTH, "w" will be always
                             * wider. If we start a page with screen width, due to the
                             * delay between {@link #didFirstLayout} and
                             * {@link #viewSizeChanged},
                             * {@link #nativeGetContentMinPrefWidth} will return a more
                             * accurate value than initial 0 to result a better layout.
                             * In the worse case, the native width will be adjusted when
                             * next zoom or screen orientation change happens.
                             */
                            width = Math.min(WebView.sMaxViewportWidth, Math
                                    .max(w, Math.max(
                                            WebView.DEFAULT_VIEWPORT_WIDTH,
                                            nativeGetContentMinPrefWidth())));
                        }
                    } else if (mViewportWidth > 0) {
                        width = Math.max(w, mViewportWidth);
                    } else {
                        width = textwrapWidth;
                    }

            }

このリファレンスに使用したドキュメントの詳細については、こちらを参照してください。あなたのコードを見ないと、なぜそれが起こっているのか正確にはわかりません。次に、これらのパラメーターを使用したビューの調整をスキップするだけであるため、ログが作成されます。

[編集] コードを示すことができずに (理解できる)、前に言ったこと以外に実際に参照できる唯一のものは、少し前にここで読んだ議論であり、異なるコンテキストには異なるデータが含まれているという事実に光を当てています。エンジンまたはアプリケーション コンテキストの代わりにアクティビティ コンテキストを使用できる場合があります。あまり役に立ちませんが、最初のゴールデン ブリックになる可能性があります。:-? 頑張ってください、うまくいくことを願っています。

于 2011-07-04T17:35:21.623 に答える