如何在不使用nestedScrollView的情况下在Webview滚动条上隐藏和显示FAB

Ash*_*wat 1 android android-webview floating-action-button

这是我的XML布局中的一个浮动操作按钮。

我在NestedScrollView中的Webview导致收缩缩放支持崩溃。

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:src="@drawable/filter_icon"
    android:tint="#FFFFFF"
    app:backgroundTint="@color/colorPrimary"
    app:elevation="4dp"
    app:fabSize="normal"
    app:useCompatPadding="true"
    app:layout_anchorGravity="bottom|end|right"
    app:layout_behavior=".ScrollAwareFABBehavior">
</android.support.design.widget.FloatingActionButton>
Run Code Online (Sandbox Code Playgroud)

Ash*_*wat 5

完整的工作代码,无需使用NestedScrollView即可隐藏和显示Webview滚动上的FAB。

public class NestedWebView extends WebView {

    private OnScrollChangedCallback  mOnScrollChangedCallback;

    public NestedWebView(Context context) {
        super(context);
    }

    public NestedWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NestedWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollChangedCallback != null) {
            mOnScrollChangedCallback.onScrollChange(this, l, t, oldl, oldt);
        }

    }

    public void setOnScrollChangedCallback(final OnScrollChangedCallback mOnScrollChangedCallback) {
        this.mOnScrollChangedCallback = mOnScrollChangedCallback;
    }

    public OnScrollChangedCallback getOnScrollChangedCallback() {
        return mOnScrollChangedCallback;
    }

    public interface OnScrollChangedCallback {
        /**
         * Called when the scroll position of a view changes.
         *
         * @param v          The view whose scroll position has changed.
         * @param scrollX    Current horizontal scroll origin.
         * @param scrollY    Current vertical scroll origin.
         * @param oldScrollX Previous horizontal scroll origin.
         * @param oldScrollY Previous vertical scroll origin.
         */
        void onScrollChange(WebView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY);
    }
}
Run Code Online (Sandbox Code Playgroud)

在xml中使用这样的自定义Webview,

<com.essence.linuxcommands.NestedWebView
                android:id="@+id/myWebView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:elevation="@dimen/card_margin"
                android:scrollbarStyle="outsideOverlay"
                android:shadowRadius="2"
                android:visibility="gone"
            />
Run Code Online (Sandbox Code Playgroud)

活动中或片段中

NestedWebView webview = (NestedWebView) rootView.findViewById(R.id.myWebView);
webview.setOnScrollChangedCallback(new NestedWebView.OnScrollChangedCallback() {
           @Override
           public void onScrollChange(WebView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
               if (scrollY > oldScrollY && scrollY > 0) {
                   fab.hide();
               }
               if (scrollY < oldScrollY) {
                   fab.show();
               }
           }
       });
Run Code Online (Sandbox Code Playgroud)