2012-02-18 6 views
7

Używam webview w mojej aplikacji na Androida, jednak po zakończeniu ładowania - które mogę wykryć przez onPageFinished (Webview webview, String url) - strona stale rośnie w nieskończoność.WebView w nieskończoność rozszerza się - w jaki sposób można temu zapobiec?

Jak mogę temu zapobiec?

Oto, co robię.

  1. Mam ogólny szablon strony, który zawiera ScrollView. Szerokość i wysokość są ustawione tak, aby pasowały do ​​rodzica. Wewnątrz ScrollView znajduje się kilka wspólnych elementów dla wszystkich działań, które tworzę. Jednym z nich jest LinearLayout, w którym wstawiam całą zawartość użytkownika.

    ..... 
    <ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_centerInParent="true" 
    android:layout_margin="0dp" 
    android:padding="0dp" 
    android:scrollbars="none" 
    > 
    
    ...... 
    
    <LinearLayout 
         android:id="@+id/content" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:layout_margin="0dp" 
         android:padding="0dp" 
         android:orientation="vertical"> 
    
         //EVERY USER CONTENT GOES HERE  
    
    </LinearLayout> 
    
    
    ...... 
    
    </ScrollView> 
    

    .....

  2. W tym szczególnym przypadku, gdy treść jest strona internetowa, która ładuje mapy Google za pomocą Mobile Web API. Oto plik układ

    <?xml version="1.0" encoding="utf-8"?> 
    
        <WebView 
         android:id="@+id/maps" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:layout_centerInParent="true" 
         android:layout_margin="0dp" 
         android:padding="0dp" 
        /> 
    
  3. Oto kod mojego działania, które inicjuje Webview

    .... WebView wv = (WebView) this.content.findViewById (R.id.maps) ;

    WebSettings ws = wv.getSettings();

    ws.setPluginState(PluginState.ON); 
    ws.setSupportZoom(false); 
    ws.setLightTouchEnabled(true); 
    ws.setDomStorageEnabled(true); 
    ws.setAppCacheMaxSize(1024 * 1024 * 8); 
    ws.setAppCachePath(context.getCacheDir().getAbsolutePath()); 
    ws.setAppCacheEnabled(true); 
    ws.setAllowFileAccess(true); 
    ws.setCacheMode(WebSettings.LOAD_NORMAL); 
    ws.setJavaScriptEnabled(true); 
    
    wv.setInitialScale(0); 
    wv.addJavascriptInterface(new Object(), "Android"); 
    wv.setKeepScreenOn(true); 
    
  4. Wreszcie, kiedy załadować mapy poprzez wv.loadUrl ("......");

po stronie kończy ładowanie uzyskać następujące dzienniki i WebView rośnie w nieskończonej pętli

02-18 14:16:06.195: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.394: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.480: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.527: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.582: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.632: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.683: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.734: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.785: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.875: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:06.957: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.058: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.332: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.398: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.449: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.496: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.554: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.605: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.652: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.707: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.742: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.792: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.839: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.902: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:07.949: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.015: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.066: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.113: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.164: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.214: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.250: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.300: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.335: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.386: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.437: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.484: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.531: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.566: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.613: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.667: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.714: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.750: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.847: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.902: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:08.949: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.003: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.035: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.085: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.121: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.167: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.218: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.253: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.304: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.367: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.417: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.476: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.523: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.585: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.632: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.664: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.710: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.765: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.812: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.863: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.894: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.957: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:09.992: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.042: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.097: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.148: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.179: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.226: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.277: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.328: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.378: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.410: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.460: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.511: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.546: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.597: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.648: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.679: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.730: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.781: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.835: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.886: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.925: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:10.976: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.011: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.066: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.125: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.183: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.214: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.265: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.320: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.371: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.402: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.453: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.507: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.558: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.589: VERBOSE/webview(10904): OnSizeChanged: Enter 
02-18 14:16:11.644: VERBOSE/webview(10904): OnSizeChanged: Enter 
.......... This goes on ........... 

Zauważyłem, że tak się dzieje, gdy strona zawiera jQuery. Ale ta sama strona ładuje się dobrze w przeglądarce zasobów.

Każdy pomysł, dlaczego tak się dzieje i jak można to naprawić?

Każda znacząca pomoc jest doceniana ... Dzięki.

Odpowiedz

-4

Próbowałeś android: layout_height = „50dip”

wartość uchodzić za wysokość atrybut, a następnie przy użyciu wrap_content

+0

To oczywiście uniemożliwia widok internetową z coraz większa, ale nie wiem, długość zawartości wcześniej, więc ustalające wysokość jeśli WebView w moim przypadku nie było możliwości od samego początku. –

+0

Swoją drogą próbowałem po prostu załadować "http://m.yahoo.com" (dość ciężką i obciążoną javascriptą stroną) - strona ładuje się, a rozmiar strony internetowej zmienia się, aby idealnie pasował do treści bez żadnych problemów . Zgaduję, że istnieje kombinacja błędu widoku przeglądarki + jQuery. –

+1

Wygląda na to, że ScrollView i WebView nie łączą się ze sobą - kropka. Próbowałem użyć widoku sieci Web poza widokiem przewijania (który bardzo zmienił strukturę moich szablonów dev) - zadziałało. Nadal nie wyjaśnia to faktu, że nieskończenie rosnący dzieje się tylko na stronach, które mają jQuery –

5

Jest to późna odpowiedź, ale mam nadzieję, że ktoś pomoże. I przeżywa ten sam problem i winowajcą był to bazowego CSS:

body { 
    width: 100%;  
    height: 100%; 
} 

Ta zmiana rozwiązuje problem:

body { 
    width: 100%;  
    height: auto; 
} 
2

Ten blogu rozwiązać mój problem. Myślę, że to pomoże.http://capdroid.wordpress.com/2014/08/07/resizing-webview-to-match-the-content-size/

private void setupWebView() { 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      webView.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)"); 
      super.onPageFinished(view, url); 
     } 
    }); 
    webView.addJavascriptInterface(this, "MyApp"); 
} 

@JavascriptInterface 
public void resize(final float height) { 
    MyActivity.this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      webView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density))); 
     } 
    }); 
} 
Powiązane problemy