保持 CollapsingToolbarLayout 永久关闭,只能以编程方式控制
Keep CollapsingToolbarLayout permanently closed, only control programatically
-
android
-
android-layout
-
android-recyclerview
-
android-coordinatorlayout
-
android-collapsingtoolbarlayout
我只想以编程方式展开 CollapsingToolbarLayout。
有效。但是,我想让 RecyclerView Touch 事件保持活动状态,因为我在协调器布局中有一个 FAB。
这可能吗?
我不记得我是从哪里得到这个的,但它对我来说非常有用。它是 AppBarLayout 的自定义行为:
public class LockableAppBarLayoutBehavior extends AppBarLayout.Behavior {
boolean locked;
private DragCallback dragCallBack = new DragCallback() {
@Override
public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
return !locked;
}
};
public LockableAppBarLayoutBehavior() {
setDragCallback(dragCallBack);
}
public LockableAppBarLayoutBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
setDragCallback(dragCallBack);
}
public void setLocked(boolean locked) {
this.locked = locked;
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes, int type) {
if (locked) {
return false;
}
return super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type);
}
public boolean isLocked() {
return locked;
}
}
最简单的用法是在您的布局中 xml:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:layout_behavior="path.to.the.class.LockableAppBarLayoutBehavior"
>
最后,这是您在代码中锁定和解锁的方式:
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
LockableAppBarLayoutBehavior behavior = (LockableAppBarLayoutBehavior) layoutParams.getBehavior();
behavior.setLocked(true);
android
android-layout
android-recyclerview
android-coordinatorlayout
android-collapsingtoolbarlayout
我只想以编程方式展开 CollapsingToolbarLayout。
有效。但是,我想让 RecyclerView Touch 事件保持活动状态,因为我在协调器布局中有一个 FAB。
这可能吗?
我不记得我是从哪里得到这个的,但它对我来说非常有用。它是 AppBarLayout 的自定义行为:
public class LockableAppBarLayoutBehavior extends AppBarLayout.Behavior {
boolean locked;
private DragCallback dragCallBack = new DragCallback() {
@Override
public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
return !locked;
}
};
public LockableAppBarLayoutBehavior() {
setDragCallback(dragCallBack);
}
public LockableAppBarLayoutBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
setDragCallback(dragCallBack);
}
public void setLocked(boolean locked) {
this.locked = locked;
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes, int type) {
if (locked) {
return false;
}
return super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type);
}
public boolean isLocked() {
return locked;
}
}
最简单的用法是在您的布局中 xml:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:layout_behavior="path.to.the.class.LockableAppBarLayoutBehavior"
>
最后,这是您在代码中锁定和解锁的方式:
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
LockableAppBarLayoutBehavior behavior = (LockableAppBarLayoutBehavior) layoutParams.getBehavior();
behavior.setLocked(true);