Android ViewTreeObserver在添加OnScrollChangedListener后不调用onScrollChanged
我有一个带有网络视图和按钮的布局。该按钮是可见的,但在滚动webview后变为可见。我使用的是ViewTreeObserver,但由于某些原因,未调用onScrollChanged。我是否误解了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
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
}
});
}
});