I've implemented floating Toolbar
in my app (hides with scroll down, shows on up) and now I see some flickering views inside WebView
, to be precise these sticked to the bottom. I've noticed that this happens when I'm resizing WebView
due to Toolbar
offset change like this:
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
is WebView
s parent. Method causes proper resizing WebView
and it's pretty efficient, no lags (EDIT: a bit laggy on older devices). But when WebView
loads site with some views sticked to the bottom then these views are flickering when resizing occurs. I can even see text in gap between bottom WebView
s edge (gap present when scrolling down, view are cutted on the bottom when scrolling up). I've catched this behavior on screens (blue - Toolbar
, gray - WebView
, light blue & orange - in-webview views sticked to bottom). It looks like this only for a couple of millis (one frame?) and get back to the bottom fixed position. How to fix this?
Same page loaded in Chrome or Firefox behaves correctly, these views are sticked to bottom and have fixed position, doesn't flicker with scroll/toolbar offset change
I'm using this NestedWebView
. My app uses a lot of fragments loaded into Activities
, which all are extending abstract BaseActivity
in which I have CoordinatorLayout
. WebViews
belong to fragments and are placed in different containers, there is no option to place WebView
straight into CoordinatorLayout
edit: XMLs
activity:
<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" />
fragment:
<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" />