Эффективное изменение размера WebView - PullRequest
0 голосов
/ 03 декабря 2018

Я реализовал плавающее Toolbar в своем приложении (скрывает с помощью прокрутки вниз, показывает вверх), и теперь я вижу некоторые мерцающие виды внутри WebView, чтобы быть точными, они прикреплены к нижней части.Я заметил, что это происходит, когда я изменяю размер WebView из-за изменения смещения Toolbar, например:

appBarLayout.addOnOffsetChangedListener(this);

@Override
public final void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
    boolean scrollFlagsSet = ((AppBarLayout.LayoutParams) getToolbar().getLayoutParams()).
            getScrollFlags() != 0;
    int bottom = (!scrollFlagsSet ? 0 : getToolbarHeightAttr()) + verticalOffset;
    swipeRefreshLayout.setPadding(0, 0, 0, bottom);
    swipeRefreshLayout.requestLayout();
}

swipeRefreshLayout - родительский элемент WebView.Метод вызывает правильное изменение размера WebView, и он довольно эффективен, без задержек (РЕДАКТИРОВАТЬ: немного запаздывает на старых устройствах).Но когда WebView загружает сайт с некоторыми видами, прикрепленными к нижней части, тогда эти размеры мерцают при изменении размера.Я даже могу видеть текст в промежутке между нижним краем WebView s (при прокрутке вниз имеется пробел, при прокрутке вверх вид обрезается снизу).Я уловил это поведение на экранах (синий - Toolbar, серый - WebView, светло-синий и оранжевый - просмотры в веб-просмотре, прикрепленные к нижней части).Похоже, это всего лишь на пару миллис (один кадр?) И вернется в фиксированное нижнее положение.Как это исправить?

scrolling gap

Та же страница, загруженная в Chrome или Firefox, работает правильно, эти представления прикреплены к нижней части и имеют фиксированное положение, немерцание с изменением смещения прокрутки / панели инструментов

Я использую это NestedWebView.Мое приложение использует много фрагментов, загруженных в Activities, которые все расширяют абстрактное BaseActivity, в котором у меня есть CoordinatorLayout.WebViews принадлежат фрагментам и размещаются в разных контейнерах, нет возможности поместить WebView прямо в CoordinatorLayout

редактировать: XML

активность:

<androidx.coordinatorlayout.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main_cooridnator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.drawerlayout.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <FrameLayout
        android:id="@+id/activity_main_content_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white" />

фрагмент:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/fragment_webview_swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <my.package.widgets.web.NestedWebView
        android:id="@+id/fragment_webview_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbarStyle="outsideOverlay" />
...