您可以使用反射來獲取DragCallback
字段窗體AppBarLayout的行爲。這個領域是私人的,吸氣劑不可用,可能不會扭曲行爲。
private AppBarLayout.Behavior.DragCallback getDragCallback(AppBarLayout appBarLayout){
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();
if(behavior != null){
try {
Field mDragCallbackField = behavior.getClass().getDeclaredField("mDragCallback");
mDragCallbackField.setAccessible(true);
AppBarLayout.Behavior.DragCallback dragCallback = (AppBarLayout.Behavior.DragCallback) mDragCallbackField.get(behavior);
return dragCallback;
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return null;
}
然後只是assertNotNull(getDragCallback(mAppBarLayout))
;