Material Deisign 炫酷的toolbar效果实在是灰常美丽,楼主使用了一个常规的上推隐藏,下拉显示的效果,
但是遇到下拉刷新控件时会有一些小冲突,我们先看看官网对于AppBarLayout.OnOffsetChangedListener的解释:
Interface definition for a callback to be invoked when an AppBarLayout's vertical offset changes.
当AppBarLayout垂直方向上的偏移量发生改变时,为触发一个回调方法定义的接口。
触发的回调方法是:onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)
再来看看对于onOffsetChanged的解释:
Called when the AppBarLayout's layout offset has been changed. This allows child views to implement custom behavior based on the offset (for instance pinning a view at a certain y value).
在AppBarLayout的布局偏移量发生改变时被调用。这个方法允许子view根据偏移量实现自定义的行为(比如在特定Y值的时候固定住一个View)。
解释的非常清楚了,不过我们需要点例子才好理解。
就以stackoverflow上的一个问题为例吧。
http://stackoverflow.com/questions/30779667/android-collapsingtoolbarlayout-and-swiperefreshlayout/30785823#30785823
解决方案:
1.拥有Appbarlayout的Actvity实现接口
public class MainActivity extends AppCompatActivity implements AppBarLayout.OnOffsetChangedListener 2.如果verticalOffset==0则可以刷新 否则不可以
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (operatelogFragment == null)
return;
if (verticalOffset == 0) {
operatelogFragment.setCanRefresh(true);
} else {
operatelogFragment.setCanRefresh(false);
}
} 楼主使用的是PtrFrameLayout
//[下拉刷新] https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh 日志模块
献上关键点代码:
final PtrFrameLayout ptrFrameLayout = (PtrFrameLayout) view.findViewById(R.id.fragment_ptr_home_ptr_frame);
StoreHouseHeader header = new StoreHouseHeader(getContext());
header.setPadding(0, ScreenUtils.dip2px(mContext, 20), 0, ScreenUtils.dip2px(mContext, 20));
header.initWithString("LOADING");
header.setBackgroundColor(ContextCompat.getColor(mContext, R.color.ultrarefreshbg));
ptrFrameLayout.setDurationToCloseHeader(1500);
ptrFrameLayout.setHeaderView(header);
ptrFrameLayout.addPtrUIHandler(header);
ptrFrameLayout.setPtrHandler(new PtrHandler() {
@Override
public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
//判断appbarlayout的监听verticalOffSet==0时才可以刷新
return canRefresh&&PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
}
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
ptrFrameLayout.postDelayed(new Runnable() {
@Override
public void run() {
SearchLog();
ptrFrameLayout.refreshComplete();
}
}, 1500);
}
});
如果是Google的
SwipeRefreshLayout:则调用SwipeRefreshLayout.setEnabled(true);
|