Вебвью дрожание / прыжки - PullRequest
3 голосов
/ 25 августа 2011

У меня есть видоискатель, который содержит веб-просмотр. В некоторых случаях (кажущихся случайными) нижняя часть веб-просмотра будет дрожать / прыгать. Это может длиться где-то от секунды до нескольких секунд. Вот видео, чтобы проиллюстрировать, о чем я говорю http://www.youtube.com/watch?v=I8s2P4R95r4

Я создал базовый тестовый проект, который воспроизводит проблему http://dl.dropbox.com/u/1256312/WebView%20Test.rar

Проблема возникает только в сотах и ​​обычно только в ландшафтном режиме. Я тестировал на нескольких устройствах 2.x и все в порядке.

После поиска я обнаружил еще один случай, когда у кого-то была похожая проблема в Honeycomb, но они предположили, что причина связана с разметкой. Однако разметка, которую я использую, довольно проста, и в любом случае я извлек ее и убедился, что она действительна.

Ниже приведен соответствующий код. Я удалил много вещей из поля зрения, чтобы устранить проблему в другом месте. View1 имеет видоискатель. В упражнении я создаю несколько пользовательских представлений типа View2 (который содержит нарушающее веб-представление) и добавляю их в viewflipper.

View1

    <LinearLayout android:id="@+id/RelativeLayout01"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical">


        <ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/question_flipper"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:layout_marginLeft="50dp" 
            android:layout_marginRight="50dp" 
            android:layout_marginTop="50dp">

        </ViewFlipper>  

        <RelativeLayout android:id="@+id/FormulaAndResultLayout"
            android:layout_width="fill_parent"
            android:layout_height="75dp"
.....
etc.

View2

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/QuestionLinearLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    android:background="#123123">
    <WebView android:id="@+id/question_web_view"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/question_figure"
        android:layout_marginTop="5dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:scrollbars="none" 
        android:layout_marginLeft="40dp" 
        android:layout_marginRight="40dp" 
        android:background="#444444"/>

</LinearLayout>

Загрузка веб-просмотра

qWebView = (WebView) view.findViewById(R.id.question_web_view); 
qWebView.loadDataWithBaseURL(null, String.format(questionHTMLHeader,  qObj.questionText), "text/html", "utf-8", null);

1 Ответ

0 голосов
/ 03 сентября 2012

Постарайтесь динамически создавать и запускать ваше веб-представление.Например, в вашем xml-файле подготовьте контейнер для веб-представления:

<LinearLayout android:id="@+id/container_linear_layout"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">
</LinearLayout>

Затем в коде create запустите веб-представление и вставьте веб-представление в контейнер:

LinearLayout container = (LinearLayout) this.findViewById(R.id.container_linear_layout);
if(container != null)
{
  WebView descriptionWebView = new WebView(context);
  descriptionWebView.loadDataWithBaseURL(null, someStringHtml, "htm", "utf-8", null);

  int margin = RSUtils.convertDpToPixels(10, context);
  LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT,
  LayoutParams.WRAP_CONTENT);
  layoutParams.setMargins(margin, 0, margin, 0);
  descriptionWebView.setLayoutParams(layoutParams);

  if(descriptionWebView != null)
     container.addView(descriptionWebView);
}
...