Я реализовал плавающее 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
, светло-синий и оранжевый - просмотры в веб-просмотре, прикрепленные к нижней части).Похоже, это всего лишь на пару миллис (один кадр?) И вернется в фиксированное нижнее положение.Как это исправить?
Та же страница, загруженная в 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" />