【问题标题】:Create custom AppBarLayout child with minimum height?创建具有最小高度的自定义 AppBarLayout 子项?
【发布时间】:2017-01-03 08:09:43
【问题描述】:

我想创建一个作为 AppBarLayout 子级的自定义视图。当我向上滚动时,我需要此视图部分折叠,但不是完全折叠。它将具有最小高度并在其小尺寸模式下保持固定在 AppBarLayout 的顶部,然后在视图向下滚动时扩展回其大尺寸模式。

我花了很多时间查看 AppBarLayout 和 CoordinatorLayout 的源代码,但到目前为止,我还没有找到一种方法来做我想做的事。看起来 AppBarLayout 的子级必须在视图向上滚动时保持可见或完全消失。

任何人都可以建议一种方法来创建一个 AppBarLayout 的子级以这种方式运行吗?

谢谢

【问题讨论】:

    标签: android android-coordinatorlayout android-appbarlayout


    【解决方案1】:

    食谱如下:

    如果您设置android:minHeightAppBarLayout 将尊重该值,不会滚动超出使您的组件变小的点。所以你的 XML 布局可能是这样的:

        <com.example.CustomCollapsingLayout
            android:layout_width="match_parent"
            android:layout_height="320dp"
            android:minHeight="108dp"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">
    

    接下来,您想让您的班级向父级AppBarLayout 注册一个OnOffsetChangedListener。您的组件将在应用栏滚动时获取事件,以便您知道如何配置视图。

    class OnOffsetChangedListener implements AppBarLayout.OnOffsetChangedListener {
    
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
    
                final int scrollRange = appBarLayout.getTotalScrollRange();
                float offsetFactor = (float) (-verticalOffset) / (float) scrollRange;
                ...
    

    这将向您展示如何找到总滚动范围,然后找到总滚动范围与当前滚动位置(即应用栏在其滚动中的位置)之间的比率。

    你应该做CollapsingToolbarLayout 做的事情;覆盖onAttachedToWindow 并在那里添加监听器:

            // Add an OnOffsetChangedListener if possible
            final ViewParent parent = getParent();
            if (parent instanceof AppBarLayout) {
                if (mOnOffsetChangedListener == null) {
                    mOnOffsetChangedListener = new OnOffsetChangedListener();
                }
                ((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
            }
    

    看看source code for CollapsingToolbarLayout,它会给你一些想法。您的视图需要做很多相同的事情。

    您还可以查看我的示例项目,该项目有一个随着工具栏滚动而缩放和移动的图像:https://github.com/klarson2/Collapsing-Image

    【讨论】:

    • 这行得通,谢谢。我读过关于 exitUntilCollapsed 的内容,但误解了。
    • 你是救世主。
    猜你喜欢
    • 2021-12-15
    • 2016-12-15
    • 2013-09-02
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2012-12-14
    • 2016-02-15
    相关资源
    最近更新 更多