关键词:android AppBarLayout 获取伸缩状态、CollapsingToolbarLayout使用
需求:获取AppBarLayout是收缩还是展开的状态,用户交互事件需要处理内容布局的全屏显示或收缩部分显示。
1. 参考的xml布局:
2.监听AppBarLayout偏移量,获取垂直偏移量和滚动范围值scrollRange
//监听AppBarLayout偏移量
appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appbarLayout, verticalOffset ->
this.verticalOffset = verticalOffset
this.scrollRange = appbarLayout.totalScrollRange
})
1.当verticalOffset==0的时候我们可以判断为展开状态;
2.当Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()的时候我们可以判断为收缩状态,这里要注意appBarLayout.getTotalScrollRange()要在OnOffsetChangedListener.onOffsetChanged()方法里面调用以获取正确的值,防止出现等于0的情况;
3.业务模块中,根据实际业务需求处理:
// 1) 获取伸缩状态的方法
/**
* 判断AppBarLayout 伸展状态
* @param scrollRange 滚动范围,根据屏幕大小的滚动范围决定,比如最终值为300\494
* @param verticalOffset 垂直偏移量
* @return true 展开状态; false 收缩状态
*/
public static boolean isExpanded(int scrollRange,int verticalOffset) {
if (verticalOffset == 0){
//展开状态
return true;
}else if (scrollRange >= verticalOffset){
//收缩状态
return false;
}else {
return true;
}
}
// 2)如何使用:
val expanded = CommonMethodHelper.isExpanded(scrollRange, verticalOffset)
if (expanded) appBarLayout?.setExpanded(false) //已经展开状态,设置收缩