2012-06-21 13 views
8

Mam aplikację dla systemu Android, która ma pole tekstowe do wyszukiwania, niektóre przyciski, odsłon witryny (1 widoczna 2 niewidoczna) i AdBor Adview. aplikacja wyszukuje tylko niektóre specjalne witryny i działa świetnie na emulatorze, urządzeniach Samsung Galaxy. ale mam problemy z HTC One X (nie wiem o innych modelach HTC).HTC One X - Podgląd strony staje się biały/pusty po dotknięciu

Problem polega na tym, że po kliknięciu przycisku wyszukiwania widok internetowy ładuje stronę. następnie "czasami", gdy próbujesz dotknąć nawet do przewijania, widok internetowy po prostu powraca do całkowicie białego obszaru z pasków przewijania. ma to miejsce szczególnie po odświeżeniu reklamy. nawet czasem tło i obszar tekstu reklamy całkowicie stają się białe - również nie można ich odczytać. na reklamie po prostu niebieska strzałka i niebieskie obrazy połączeń telefonicznych pozostają widoczne!

Czy ktoś ma takie problemy, jak i wszelkie rozwiązania? z góry dziękuję.

tutaj jest mój układ xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    android:orientation="vertical" > 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:id="@+id/layoutDashboard" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:background="@drawable/border_shape" 
      android:orientation="vertical" 
      android:paddingTop="1sp" > 

      <EditText 
       android:id="@+id/editxtKeyword" 
       android:layout_width="fill_parent" 
       android:layout_height="43dp" 
       android:layout_marginLeft="1dp" 
       android:layout_marginRight="1dp" 
       android:layout_marginTop="2dp" 
       android:ems="10" 
       android:hint="@string/editxtKeyword_hint" 
       android:singleLine="true" > 
      </EditText> 

      <HorizontalScrollView 
       android:id="@+id/horizontalScrollView1" 
       android:layout_width="fill_parent" 
       android:layout_height="0dip" 
       android:layout_gravity="center_vertical" 
       android:layout_weight="0.30" 
       android:paddingBottom="2dp" 
       android:paddingLeft="1dp" 
       android:scrollbars="none" > 

       <LinearLayout 
        android:id="@+id/layoutButtons" 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent" 
        android:layout_gravity="center_vertical" 
        android:layout_marginTop="0dp" 
        android:layout_marginBottom="1dp" 
        android:layout_marginLeft="1dp" 
        android:layout_marginRight="1dp" 
        android:orientation="horizontal" > 
< 
        <Button 
         android:id="@+id/btnAk" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center_vertical" 
         android:layout_margin="1dp" 
         android:background="@drawable/custom_button_shape" 
         android:text="asd" /> 

        <Button 
         android:id="@+id/btnCm" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center_vertical" 
         android:layout_margin="1dp" 
         android:background="@drawable/custom_button_shape" 
         android:text="csm" /> 

       </LinearLayout> 
      </HorizontalScrollView> 
     </LinearLayout> 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" > 

      <WebView 
       android:id="@+id/webV" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_above="@+id/linlaylay1" 
       android:visibility="visible" /> 

      <WebView 
       android:id="@+id/webVAnalytics" 
       android:layout_width="1dp" 
       android:layout_height="0dp" 
       android:visibility="invisible" /> 

      <WebView 
       android:id="@+id/WebVSahibinden" 
       android:layout_width="1dp" 
       android:layout_height="0dp" 
       android:visibility="invisible" /> 

      <LinearLayout 
       android:id="@+id/linlaylay1" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:layout_margin="0dp" 
       android:orientation="vertical" 
       android:padding="0dp" > 

       <com.google.ads.AdView 
        android:id="@+id/adViewSmall" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal|top" 
        ads:adSize="BANNER" 
        ads:adUnitId="a123123" 
        ads:loadAdOnCreate="true" 
        ads:testDevices="TEST_EMULATOR" /> 
      </LinearLayout> 
     </RelativeLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/layoutProgress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top|center_horizontal" 
     android:layout_marginBottom="50dp" 
     android:layout_marginTop="5dp" 
     android:background="@drawable/progress_shape" 
     android:padding="2dp" 
     android:visibility="invisible" > 

     <TextView 
      android:id="@+id/lblLoading" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="2dp" 
      android:text="@string/msg_loading" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="#000000" /> 

     <ImageButton 
      android:contentDescription="@string/dialog_cancel" 
      android:id="@+id/btnStop" 
      android:layout_width="30dp" 
      android:layout_height="30dp" 
      android:src="@drawable/stop" /> 
    </LinearLayout> 

</FrameLayout> 
+0

nie oglądaj się za siebie, patrz z przodu! są pewne przypadki, które dają błąd. Ale htc wydaje nowe urządzenia, a problem nie występuje w tych urządzeniach. – Yaya

Odpowiedz

2

Istnieje wiele kwestii Wykazując przyspieszane sprzętowo poglądy na szczycie siebie. Przerobiłbym Twój układ, by nie nakładał się na widoki sieciowe ani nie przewijał widoków ani nie wyłączał akceleracji sprzętowej.

+0

Lance, dzięki za twoją odpowiedź. w rzeczywistości żadne widoki stron internetowych nie pokrywają się, ponieważ tylko jedna z nich jest widoczna, inne nie. podczas ładowania wyświetlaję etykietę "ładowanie" w obszarze EditText i to wszystko nakłada się. co masz na myśli mówiąc o wyłączaniu akceleracji sprzętowej? –

+0

Możesz wyłączyć akcelerację sprzętową dla pojedynczych widoków w kodzie lub całkowicie w swoim manifeście, jest to nowa funkcja Androida, w której widoki są przekształcane w tekstury GPU i rysowane w ten sposób. Przy okazji, często widziałem takie rzeczy, jak podglądy kamer, które kolidują z rzeczami, nawet gdy są niewidoczne. Jeśli naprawdę masz zamiar układać widoki tak, jak robisz, lepiej by było, gdybyś użył go zamiast niewidzialnego. To już naprawione błędy dla mnie. –

1

Widziałem ten problem z pojedynczymi odsłonami na telefonach HTC. One of the comments in this bug thread podaje sugestie, które pomogą zoptymalizować wydajność WebView. Błąd dotyczy transformacji 3D, ale odkryłem, że techniki komentarza mogą być przydatne dla WebViews.

This presentation at Google I/O 2012 zapewnia również dobre informacje na temat WebViews.

Obie sugerują, że zawartość dynamiczna powinna być umieszczona na "warstwie". Oznacza to przypisanie tej reguły CSS elementu:

-webkit-transform: translate3d(0, 0, 0); 

Stosując tę ​​zasadę, Android „informuje przeglądarkę do pre-kompozytowe warstwę na własnej tekstury więc może być animowany później na (prawie) za darmo” to zachowanie nie jest wolne - może zużywać więcej pamięci, więc zastosowałem je rozważnie. Przedstawiona powyżej prezentacja dobrze wyjaśnia dlaczego.

W moim przypadku udało mi się uniknąć "białego ekranu", stosując tę ​​zasadę do DIV, który otacza całą stronę. Strona będzie czasem renderować biały na sekundę, a następnie renderować zawartość. Nie widziałem "białej" strony, która trwa wiecznie tak jak ja przed zastosowaniem tej techniki. Nie widziałem zużycia pamięci poza kontrolą. YMMV.

Proponuję również zrobić, co można, aby uprościć swój układ. Łatwiej powiedzieć, niż zrobić, ale kilka dobrych sugestii można znaleźć in the docs.

+1

Przeczytałem kilka hacków i wypróbowałem wiele sposobów na obejście wszystkich problemów związanych z webviewem HTC. W końcu to była jedyna rzecz, która zadziałała. Dzięki! –

+0

Daniel, ciesząc się, że to podejście zadziałało dla kogoś innego. To był jeden z najdziwniejszych problemów, z jakimi się zetknąłem. –

+0

nie działa dla mnie :( –

2

A known bug

Można wyłączyć akcelerację sprzętową na WebView ale należy to robić w sposób, który nie łamie starszych urządzeń:

if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB){ 
    //mWebView is some WebView 
    mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
} 

Ostrzeżenia

  • Filmy nie będą odtwarzane w przeglądarce. Przewijanie nie będzie prawie tak gładko:

Naprawiono to w Jelly Bean w zależności od błędu, ale nie byłem w stanie tego zweryfikować osobiście.