在webview滚动时无法隐藏工具栏

时间:2016-12-01 14:26:12

标签: android webview android-toolbar android-coordinatorlayout nestedscrollview

滚动webview时如何隐藏工具栏? 我知道,webview必须在NestedScrollView和CoordinatorLayout工具栏中 - 在AppBarLayout中。但我真的不能这样做。

如果有人可以帮助我,我将非常感激。

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>

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

    <android.support.design.widget.AppBarLayout
        android:id="@+id/main_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/custom_toolbar_size" />

    </android.support.design.widget.AppBarLayout>


    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/custom_tablayout_size"
        android:layout_gravity="bottom"
        android:background="@color/toolbarColor"
        app:tabIndicatorHeight="0dp"
        >

        <android.support.design.widget.TabItem
            android:id="@+id/ti_arrow_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_arrow_back" />

        <android.support.design.widget.TabItem
            android:id="@+id/ti_arrow_forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_arrow_forward" />

        <android.support.design.widget.TabItem
            android:id="@+id/ti_update"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_update" />

        <android.support.design.widget.TabItem
            android:id="@+id/ti_inset"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_inset" />

        <android.support.design.widget.TabItem
            android:id="@+id/ti_star"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@drawable/ic_star_border" />

    </android.support.design.widget.TabLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:layout_marginBottom="@dimen/custom_tablayout_size"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/custom_toolbar_size"
    android:background="@color/toolbarColor"
    android:paddingTop="2dp"
    app:layout_scrollFlags="scroll|enterAlways" />

2 个答案:

答案 0 :(得分:0)

您尝试过的解决方案无效,因为您的WebView位于NestedScrollView中。由于这个原因,WebView的OnScrollListener也无法正常工作。

因此,请使用NestedScrollView侦听器,然后使用getSupportActionBar().hide();getSupportActionBar().show();隐藏或显示工具栏。

从这里复制:https://stackoverflow.com/a/37630070/1860982

        final String TAG = "ScrollPosition";
        NestedScrollView nestedScrollView = (NestedScrollView) findViewById(R.id.scrollNextView);
        if (nestedScrollView != null) {

            nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
                @Override
                public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

                    if (scrollY > oldScrollY) {
                        getSupportActionBar().hide();
                        Log.i(TAG, "Scroll DOWN");
                    }
                    if (scrollY < oldScrollY) {
                        Log.i(TAG, "Scroll UP");
                    }

                    if (scrollY == 0) {
                        getSupportActionBar().show();
                        Log.i(TAG, "TOP SCROLL");
                    }

                    if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) {
                        Log.i(TAG, "BOTTOM SCROLL");
                    }
                }
            });
        } 

答案 1 :(得分:-1)

您可以使用设计库的CoordinatorLayout和NestedScrollView在没有任何Java代码的情况下执行此操作。这是你如何做到的。