我的解决方案基于创建自定义视图。首先创建一个扩展原生 AppBarLayout 的类:
public class CustomAppBar extends AppBarLayout { ....
然后在类中设置一个 addOnOffsetChangedListener ,如下所示:
this.addOnOffsetChangedListener...
您可以通过在构造函数中设置或调用构造函数中的方法来完成上述操作。所以你需要构造函数,记得使用带有 2 个参数的构造函数才能添加到 xml 中:
public CustomAppBar(Context context, AttributeSet attrs) {
super(context, attrs);
//You can set the listener here or maybe call the method that set the listener
}
然后我们必须访问视图的状态,因此在您的自定义视图类中创建一个私有布尔值,如果您的视图开始展开或折叠,则将其设置为 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,在那里使用您的自定义视图,然后在活动或片段中获取视图并使用该方法来了解 AppBar 状态