веб-просмотр внутри NestedScrollView вызывает проблему с высотой

Я использую support.v4.widget.NestedScrollView, и у меня проблема с моим веб-просмотром.

Вот мой макет:

<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:focusableInTouchMode="true">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:id="@+id/barlayout">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:background="#9E9E9E"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|enterAlways">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/relativeLayout"
            android:animateLayoutChanges="true">

            <!-- some views here -->

        </RelativeLayout>

    </android.support.v7.widget.Toolbar>

</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_height="match_parent"
        android:layout_width="match_parent" />

</android.support.v4.widget.NestedScrollView>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>

    <include
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        layout="@layout/dialog_location"
        android:id="@+id/dialog"
        android:visibility="invisible"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

with this layout the webview have to much scroll (sorry for the link, i cant post images)

https://drive.google.com/open?id=0B7otV-_1sdEvUWRzSjlHY01fY3c

и если я изменю веб-просмотр на wrap_content, веб-просмотр будет маленьким

<WebView
        android:id="@+id/webView"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" />

https://drive.google.com/open?id=0B7otV-_1sdEvbVFSRlR0a2IxeUk


person Kakaman593    schedule 10.09.2015    source источник


Ответы (1)


Мы делаем то же самое. Это было передано разработчикам и дизайнерам Google. Решение, предоставленное на данный момент, заключается в том, чтобы не использовать веб-просмотры Android внутри NestedScrollView.

Вот выдержка из обсуждения здесь:

Это ВАИ.

Если вы поместите веб-просмотр в NestedScrollView, высота будет равна wrap_contents, а веб-просмотр расширится до размера страницы. Это как если бы на рабочем столе вы изменяли размер окна браузера по высоте страницы, чтобы оно не могло прокручиваться по вертикали. Прокрутка происходит в NestedScrollView, а не в самом веб-просмотре.

Таким образом, отсутствие js на странице не видит никаких событий прокрутки, поэтому он не знает, что вы прокрутили страницу до конца, загружая больше контента.

Кроме того, аппаратные слои поддерживаются текстурами GL, и они имеют максимальный размер (который меньше размера экрана, хотя обычно ненамного больше). Если представление становится больше максимального размера текстуры, оно не будет работать с аппаратным слоем. Это относится к любому представлению, а не только к веб-просмотру.

Решение: не помещайте веб-просмотр в NestedScrollView. не используйте веб-просмотр в режиме wrap_contents. Пусть webview прокручивает саму веб-страницу.

person Neon Warge    schedule 06.02.2016