Android 3.1 WebView переполнение прокрутки - не отображается длинный список при прокрутке - PullRequest
3 голосов
/ 21 октября 2011

Я создал приложение для Android 3.1 Tablet, работающее на Samsung Galaxy Tab 10.1, которое отображает приложение HTML5 в WebView с использованием прокручиваемых элементов div (overflow-y:scroll). Элемент div с возможностью прокрутки контейнера установлен на определенную высоту, а список дочерних элементов div динамически создается во время загрузки.

В браузере устройства Android 3.1 прокручиваемый контейнерный контейнер, кажется, обрезает прокручиваемый контент длинных списков, обновляя только переполненный div с контентом, когда пользователь прокручивает не визуализированный контент в поле зрения. Однако в Android WebView прокручиваемый элемент div не обновляет и отображает больше контента, когда обрезанный контент прокручивается в представление.

Несмотря на то, что другие посты предлагали iScroll, я обнаружил, что он довольно медленный, когда для моего тестового устройства требуется несколько прокручиваемых элементов div на одной странице HTML (Galaxy Tab 10.1).

Пример кода приложения:

public class MyActivity extends Activity {
    WebView mWebView;
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.setWebViewClient(new WebViewClient());
        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.loadUrl("file:///android_asset/index.html");
    }
    ...
}

Пример страницы переполнения Div (index.html) - jQuery используется для создания случайных чисел для списка:

<html>
<head>
<style type="text/css">
  #overflow_container {background: #cecece; height:600px; overflow-y: scroll;}
  p {margin-left:20px;}
  ol {padding-top:0px;margin-top:0px;}
  ol li {line-height:48px;border-bottom:1px solid white;height:48px;}
  .container { color:#333;}
</style>
<script src="http://jquery.com/src/jquery-latest.js"></script>
<script type="text/javascript">
  $(function() {

    $("#content_list").html("<ol></ol>");
    for(var i = 0; i< 100; i++) {
      $("#content_list ol").append("<li>" + (Math.random() * 1000) + "</li>");
    }
  });
</script>
</head>
<body>
<div class="container">
  <h2>Overflow Contents</h2>
  <p>Ordered List of Random Numbers inside a scrollable div <code>overflow-y:scroll</code></p>
  <div id="overflow_container">
    <div id="content_list">
    </div>
  </div>
</div>
</body>
</html>

Заранее спасибо.

1 Ответ

0 голосов
/ 09 февраля 2013

Альфред, Спасибо за вопрос. У нас была та же проблема с приложением PhoneGap на Android 3.2.
До сих пор мы смогли добиться хотя бы некоторого улучшения со следующим:

"#TARGET touchmove": function() {
  var target = document.getElementById("TARGET");
  target.style.display="none";
  target.offsetHeight;
  target.style.display="block";
}

(Вы можете переформатировать это в стиль jquery, и оно должно работать, ключ - три целевых действия. Из всех наших тестирований различных комбинаций, кажется, это единственное, что работает.)

Эта статья, кажется, лучше всего объясняет, что происходит. http://code.google.com/p/android/issues/detail?id=19827#hc16

Мы еще не завершили наше решение, поскольку прокрутка импульса прокручивается слишком далеко после того, как сработало событие TouchMove. Похоже, что обновление до 4.1 может быть хорошим вариантом, когда это возможно, конечно. В других случаях мы рассматриваем следующие варианты:

  • Отключение импульса прокрутки, который, как мы надеемся, позволит вышеуказанному решению стать достойным UX.
  • предотвращение по умолчанию при сенсорном перемещении и самостоятельная обработка действия прокрутки с намерением запустить каскад и затем добавить ту же функцию к касанию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...