我的解决方案基于创建一个自定义视图。首先创建一个类,继承本地的AppBarLayout:
public class CustomAppBar extends AppBarLayout { ....
然后在类内设置addOnOffsetChangedListener,像这样:
this.addOnOffsetChangedListener...
您可以通过在构造函数中设置,或者在构造函数内调用方法来完成上述操作。因此,您需要使用带有2个参数的构造函数,请记得使用具有 2 个参数的构造函数以能够被添加到 XML 中:
public CustomAppBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
接下来我们需要访问视图的状态,因此在自定义视图类中创建一个私有布尔值,并根据需要将其设置为true或false,以指示视图是否默认展开或收起,在这种情况下,我的视图默认展开:
private boolean isExpanded = true
现在您需要更新该布尔值的状态:
this.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (verticalOffset == 0) {
isExpanded = true;
} else {
isExpanded = false;
}
}
});
下一步是在CustomAppBar类中使用getter获取布尔值的状态。
public boolean isExpanded() {
return isExpanded;
}
下一步是去你的 xml 文件中,使用你自定义的视图,然后在 Activity 或 Fragment 中获取该视图并使用方法来知道 AppBar 的状态。