Android ViewTreeObserver在添加OnScrollChangedListener后不调用onScrollChanged

Android ViewTreeObserver在添加OnScrollChangedListener后不调用onScrollChanged,android,scroll,android-view,Android,Scroll,Android View,我有一个带有网络视图和按钮的布局。该按钮是可见的,但在滚动webview后变为可见。我使用的是ViewTreeObserver,但由于某些原因,未调用onScrollChanged。我是否误解了onScrollChanged的名称 this.licenseAgreementView = (WebView) findViewById(R.id.licenseAgreementView); ViewTreeObserver observer = this.licenseAgreementView.g

我有一个带有网络视图和按钮的布局。该按钮是可见的,但在滚动webview后变为可见。我使用的是ViewTreeObserver,但由于某些原因,未调用onScrollChanged。我是否误解了onScrollChanged的名称

this.licenseAgreementView = (WebView) findViewById(R.id.licenseAgreementView);
ViewTreeObserver observer = this.licenseAgreementView.getViewTreeObserver();
observer.addOnScrollChangedListener(new OnScrollChangedListener() {
    public void onScrollChanged() {
    makeButtonVisible();
    }
});

试试这个,适合我的。

在我的例子中,我必须将GlobalLayoutListener附加到我的scrollView,然后在布局更改时,我必须添加scrollListener

scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ViewTreeObserver observer = scrollView.getViewTreeObserver();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                observer.removeOnGlobalLayoutListener(this);
            } else {
                observer.removeGlobalOnLayoutListener(this);
            }
            observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    //Your code here
                }
            });
        }
    });

这对我很有用。

代码中不清楚
LicenseAgreementView
WebView
还是包含布局。如果是后者,请尝试获取WebView并将观察者添加到其中。LicenseAgreementView是WebView哇,此代码甚至适用于另一个ScrollView中的ScrollView!为我工作。。谢谢
scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ViewTreeObserver observer = scrollView.getViewTreeObserver();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                observer.removeOnGlobalLayoutListener(this);
            } else {
                observer.removeGlobalOnLayoutListener(this);
            }
            observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    //Your code here
                }
            });
        }
    });