我有按钮而不是浮动动作按钮我想用快餐栏锚定它,因为它浮动动作条就像浮动动作按钮在显示小吃条时向上移动,浮动动作条我们这样做:
Snackbar.make(fab, s, Snackbar.LENGTH_SHORT);
如何使用简单的按钮作为零食栏和按钮不知道零食栏的存在,反之亦然并独立移动
由于
答案 0 :(得分:1)
文档说这个
在视图层次结构中使用CoordinatorLayout允许Snackbar启用某些功能,例如滑动到关闭和自动移动小部件,如FloatingActionButton。
因此,只要您的按钮直接位于协调器布局下,并将按钮传递给Snackbar,就像这样
Snackbar.make(yourButton, s, Snackbar.LENGTH_SHORT);
。向上移动小部件应该有效。
答案 1 :(得分:0)
您必须将Behavior
附加到要与View
移动一起移动的Snakebar
在这里,我制作了一个自定义View
并将行为附加到其中
@CoordinatorLayout.DefaultBehavior(CustomView.Behavior.class)
public class CustomView extends View {
public CustomView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public static class Behavior extends CoordinatorLayout.Behavior<CustomView> {
public Behavior() {
super();
}
public Behavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onAttachedToLayoutParams(@NonNull CoordinatorLayout.LayoutParams lp) {
if (lp.dodgeInsetEdges == Gravity.NO_GRAVITY) {
// This setting makes it works (learn from FloatingActionButton.Behavior)
lp.dodgeInsetEdges = Gravity.BOTTOM;
}
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, CustomView child,
View dependency) {
return false;
}
}
}
在您的布局中使用此CustomView
,它应该可以正常工作
FloatingActionButton
执行相同的操作,它有一个内部Behavior
,使用阴影填充,显示/隐藏基于AppBarLayout
运动的更多内容。 CoordinatorLayout
中的每个移动都基于其Behavior
机制
参考此处:http://saulmm.github.io/mastering-coordinator
P / S :关于Snakebar.make
使用情况,将CoordinatorLayout
传递给view
参数,不传递任何其他组件,这将保存系统性能。如果查看Snakebar
代码,它有一个循环,使用view参数查找根视图。根视图是它想要的:
private static ViewGroup findSuitableParent(View view) {
ViewGroup fallback = null;
do {
if (view instanceof CoordinatorLayout) {
// We've found a CoordinatorLayout, use it
return (ViewGroup) view;
} else if (view instanceof FrameLayout) {
if (view.getId() == android.R.id.content) {
// If we've hit the decor content view, then we didn't find a CoL in the
// hierarchy, so use it.
return (ViewGroup) view;
} else {
// It's not the content view but we'll use it as our fallback
fallback = (ViewGroup) view;
}
}
if (view != null) {
// Else, we will loop and crawl up the view hierarchy and try to find a parent
final ViewParent parent = view.getParent();
view = parent instanceof View ? (View) parent : null;
}
} while (view != null);
// If we reach here then we didn't find a CoL or a suitable content view so we'll fallback
return fallback;
}