Android - CoordinatorLayout/NestedScrollView/隐藏/显示工具栏/WebView问题

11

我对此有问题:

<?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/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways" />
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        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>
当我在Webview中滚动时,工具栏会隐藏或显示(非常好!),但加载/定位网页存在问题。例如,如果我滚动到页面的中间并点击链接,则加载的新页面也将位于页面的中间位置而不是顶部。就像滚动条没有从一个页面移动到另一个页面一样。如果我在NestedScrollView中添加:
android:fillViewport="true"

所有内容都可以在Webview中正常工作(页面可以加载并且显示良好,尽管从顶部开始),但是我失去了工具栏的隐藏/显示功能 :(

你有什么关于这个问题的想法吗?

提前感谢您的帮助 :)

(附注:Android Design Support Library: 23.0.1)

Yop

1个回答

4

我的理解: 由于您将WebView放在一个NestedScrollView中,因此滚动不是在WebView级别上完成的,所以当您加载新页面时,NestedScrollView保持在同一位置。

建议: 创建一个WebViewClient并覆盖onPageStarted方法,在这里您应该将NestedScrollView的滚动位置更改为0:

nestedScrollView.scrollTo(0, 0);

1
是的,对我来说这个可以用于滚动到顶部,另一个问题是当从高高的 Webview 跳转到另一个内容较小的 Webview 时,会有很长的白色空间滚动到底部。你能建议如何解决吗?谢谢。 - Jawaad
1
@Jawaad,如果您打开一个单独的问题,提供代码示例并描述您已经尝试过什么,那将更好。至于您的问题: 我会使用层次结构查看器来检查问题是WebView未重新调整大小还是NestedScrollView。 您可以尝试在onPageFinished中调用NestedScrollView上的invalidate,不确定这是否会解决问题。 - Raanan
这是一个很好的想法,但另一个问题是缩放控件,在这个布局设置中无法工作。 - Sam Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接