NestedScrollView 不滚动。 View.canScrollVertically() returns 错误
NestedScrollView does not scroll. View.canScrollVertically() returns false
在我的 android 应用程序中,我有一个 BottomSheetDialogFragment
,其中包含一个 NestedScrollView
,其中有一个自定义 class ImageView
和 onMeasure()
变了。
当我在 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
只能托管一个 child 和 nestedScrolling
。在我的例子中,我添加了 WebView
和 NestedScrollView
(里面有 ImageView
)。
因此,无论我是否为 WebView
设置可见性 View.GONE
,BottomSheetDialogFragment
的滚动 child 始终设置为 WebView
。
底线。我最终为 ImageView
创建了一个单独的 BottomSheetDialogFragment
,因为 BottomSheetDialogFragment
只接受一个滚动 child(它在从视图层次结构顶部扫描时找到的第一个滚动)。
现在一切正常。
在我的 android 应用程序中,我有一个 BottomSheetDialogFragment
,其中包含一个 NestedScrollView
,其中有一个自定义 class ImageView
和 onMeasure()
变了。
当我在 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
只能托管一个 child 和 nestedScrolling
。在我的例子中,我添加了 WebView
和 NestedScrollView
(里面有 ImageView
)。
因此,无论我是否为 WebView
设置可见性 View.GONE
,BottomSheetDialogFragment
的滚动 child 始终设置为 WebView
。
底线。我最终为 ImageView
创建了一个单独的 BottomSheetDialogFragment
,因为 BottomSheetDialogFragment
只接受一个滚动 child(它在从视图层次结构顶部扫描时找到的第一个滚动)。
现在一切正常。