NestedScrollView 不滚动。 View.canScrollVertically() returns 错误

NestedScrollView does not scroll. View.canScrollVertically() returns false

在我的 android 应用程序中,我有一个 BottomSheetDialogFragment,其中包含一个 NestedScrollView,其中有一个自定义 class ImageViewonMeasure() 变了。

当我在 Activity 中的独立应用程序中尝试代码时,NestedScrollView 正确滚动。

但是当我在我的应用程序的 BottomSheetDialogFragment 中集成相同的代码时,它不会滚动并且 canScrollVertically()(-1 和 1)returns false for NestedScrollView

当我需要显示 ImageView 时,我将 content_webview 的可见性设置为 View.GONE,将 NestedScrollView 的可见性设置为 View.VISIBLE。图像形成并正确加载。问题是 NestedScrollView 不滚动。

我的 layout 文件有什么问题?我没有在 java 文件中禁用任何类型的滚动。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="false"
android:background="@color/transparent"
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true">


<ProgressBar
    android:id="@+id/progress_webview_loading"
    android:layout_width="match_parent"
    android:layout_height="2.5dp"
    android:indeterminate="false"
    android:progressTint="@color/green"
    android:backgroundTint="@color/lighter_gray_2"
    android:max="100"
    style="?android:attr/progressBarStyleHorizontal"
    />

<com.hootout.webviews.NestedScrollingWebView
    android:id="@+id/content_webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/progress_webview_loading">

</com.hootout.webviews.NestedScrollingWebView>

<android.support.v4.widget.NestedScrollView
    android:id="@+id/pdf_view_scroller"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/progress_webview_loading"
    android:isScrollContainer="true"
    android:visibility="gone">

    <com.hootout.custom.AspectRatioImageView
        android:id="@+id/pdf_image_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        />

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

<TextView
    android:id="@+id/btn_close_content_webview"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:text="@string/icon_close_without_circle"
    android:textColor="@color/green"
    android:gravity="center"
    android:shadowColor="@color/black"
    android:shadowDx="1"
    android:shadowDy="1"
    android:shadowRadius="5"
    android:background="@drawable/round_button_goto_top"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="10dp"
    />


</RelativeLayout>

AspectRatioImageView.java

import android.content.Context;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

public class AspectRatioImageView extends AppCompatImageView {

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

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

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

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = 0;
    int height = 0;
    if(getDrawable() != null)
    {
        width = MeasureSpec.getSize(widthMeasureSpec);
        height = width * getDrawable().getIntrinsicHeight() / 
getDrawable().getIntrinsicWidth();
    }
    else{
        width = MeasureSpec.getSize(widthMeasureSpec);
        height = MeasureSpec.getSize(heightMeasureSpec);
    }
    setMeasuredDimension(width, height);
}
}

问题是 BottomSheetDialogFragment 只能托管一个 childnestedScrolling。在我的例子中,我添加了 WebViewNestedScrollView(里面有 ImageView)。

因此,无论我是否为 WebView 设置可见性 View.GONEBottomSheetDialogFragment 的滚动 child 始终设置为 WebView

底线。我最终为 ImageView 创建了一个单独的 BottomSheetDialogFragment,因为 BottomSheetDialogFragment 只接受一个滚动 child(它在从视图层次结构顶部扫描时找到的第一个滚动)。

现在一切正常。