AppBar 滚动行为

AppBar Scrolling Behavior

我们有 app:layout_behavior="@string/appbar_scrolling_view_behavior";它非常适合工具栏。 我创建自定义 BottomBar 并想反转导致此标志的移动方向。 有什么实现方法吗?

我找到了解决方案!

我们需要像这样扩展 CoordinatorLayout.Behavior

public class BottomBarBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {

    private int defaultDependencyTop = -1;

    public BottomBarBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {
        return dependency instanceof AppBarLayout;
    }

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) {
        if (defaultDependencyTop == -1) {
            defaultDependencyTop = dependency.getTop();
        }
        child.setTranslationY(-dependency.getTop() + defaultDependencyTop);
        return true;
    }
}

Eduard Poida 如果在隐藏底部导航的情况下更改 phone 的方向,您的解决方案将无法正常工作。Screenshot

我已经修改了你的解决方案的一行,它对我来说效果更好:

public class BottomNavigationBehavior<V extends View> extends CoordinatorLayout.Behavior<V>
{

private int defaultDependencyTop = -1;

public BottomNavigationBehavior(Context context, AttributeSet attrs)
{
    super(context, attrs);
}

@Override
public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency)
{
    return dependency instanceof AppBarLayout;
}

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency)
{
    if (defaultDependencyTop == -1)
    {
        defaultDependencyTop = dependency.getTop();
    }
    child.setTranslationY(-dependency.getTop()*2);
    return true;
}
}