当前位置: 首页 > 知识库问答 >
问题:

如何确定CollapsingToolbar已折叠?

司马高韵
2023-03-14

我需要知道材料设计库中的折叠工具栏何时折叠。

共有3个答案

戚飞雨
2023-03-14

看看这个github要点

public class MyAppBarLayout extends AppBarLayout
        implements AppBarLayout.OnOffsetChangedListener {

    private State state;
    private OnStateChangeListener onStateChangeListener;

    public MyAppBarLayout(Context context) {
        super(context);
    }

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

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        if (!(getLayoutParams() instanceof CoordinatorLayout.LayoutParams)
                || !(getParent() instanceof CoordinatorLayout)) {
            throw new IllegalStateException(
                    "MyAppBarLayout must be a direct child of CoordinatorLayout.");
        }
        addOnOffsetChangedListener(this);
    }

    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        if (verticalOffset == 0) {
            if (onStateChangeListener != null && state != State.EXPANDED) {
                onStateChangeListener.onStateChange(State.EXPANDED);
            }
            state = State.EXPANDED;
        } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) {
            if (onStateChangeListener != null && state != State.COLLAPSED) {
                onStateChangeListener.onStateChange(State.COLLAPSED);
            }
            state = State.COLLAPSED;
        } else {
            if (onStateChangeListener != null && state != State.IDLE) {
                onStateChangeListener.onStateChange(State.IDLE);
            }
            state = State.IDLE;
        }
    }

    public void setOnStateChangeListener(OnStateChangeListener listener) {
        this.onStateChangeListener = listener;
    }

    public interface OnStateChangeListener {
        void onStateChange(State toolbarChange);
    }

    public enum State {
        COLLAPSED,
        EXPANDED,
        IDLE
    }
}
赫连俊雄
2023-03-14

更新:由于支持版本 23.1.1 的问题不再存在,无需使用侦听器并禁用滑动刷新布局,它将按预期工作(链接)。

实现AppBarLayout。AppBarLayout上的OnOffsetChangedListener侦听器

AppBarLayout appBarLayout = (AppBarLayout) view.findViewById(R.id.app_bar_layout);
appBarLayout.addOnOffsetChangedListener(this);

并检查offset是否为0,这意味着工具栏完全展开。

@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int offset)
{
    if (offset == 0)
    {
        // Fully expanded
    }
    else
    {
        // Not fully expanded or collapsed
    }
}
许彭祖
2023-03-14

正如Marko所说,这可以使用您自己的OnoffsetChangedListener实现来实现。

AppBarLayout appBarLayout = (AppBarLayout) view.findViewById(R.id.app_bar_layout);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
                // Collapsed
            } else if (verticalOffset == 0) {
                // Expanded
            } else {
                // Somewhere in between
            }
        }
    }););
 类似资料:
  • UDPATE问题: 我已经完成了禁用和启用视图的折叠。我使用这行代码来禁用折叠:

  • 问题内容: 我如何断言页面的CSS已在Watin 2.1中成功加载并应用了其样式? 问题答案: 在进行了一些研究并写下我的答案之后,我偶然发现了该链接,该链接解释了您需要了解的有关CSS的所有信息,何时加载CSS以及如何检查CSS。 实际上,所提供的链接对它的解释很好,以至于我在其中添加了一些引用以供将来参考。 如果您好奇,我的答案将是#2和#4的变体。 何时真正加载样式表? … 顺便说一句,让我

  • 问题内容: 尤其是在从webpack v1到v2的过渡期间,以编程方式确定所安装的webpack版本非常重要,但我似乎找不到合适的API。 问题答案: webpack 4现在提供了可以使用的version属性!

  • 我的代码要求用户输入动物物种的值,然后将其显示给他们。我只需要最后添加一个部分,它也会告诉用户最濒危的动物(输入的数字最低)。我已经环顾了一些地方,并使用x进行了triec

  • 问题内容: 出于某种原因,我的表单不想获取复选框的值…我不确定这是否是我的编码,但是当我尝试输入值时,我得到了结果。我有什么问题? 编辑 我尝试将其更改为此 但是现在它甚至不想。怎么了 问题答案: 将函数放在内部。当执行该行时,主体尚未解析,并且该元素不存在。这工作得很好:

  • 问题内容: 如何检查字符串是否已经编码? 例如,如果我编码,我得到。如果我再次对最后一个字符串进行编码,我会得到,如果这样做,我必须先知道它是否已经被编码… 我已经保存了编码参数,我需要搜索它们。我不知道输入参数是什么,要编码还是不编码,所以我必须知道在搜索之前是否必须对它们进行编码或解码。 问题答案: 解码,与原始图像进行比较。如果确实不同,则对原稿进行编码。如果没有区别,则原始文件不会被编码。