片段内容下方是否存在持久性 BottomSheet?

2024-05-15

Using a 持久底表 https://material.google.com/components/bottom-sheets.html#bottom-sheets-persistent-bottom-sheets,在一个协调器布局 https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html,当 BottomSheet 处于其状态时,如何防止 BottomSheet 覆盖其他用户界面元素倒塌 https://developer.android.com/reference/android/support/design/widget/BottomSheetBehavior.html#STATE_COLLAPSED又名偷看状态?

我已成功将 BottomSheet 添加到我的导航抽屉和基于片段的应用程序;但是,如上所述,当 BottomSheet 处于以下任一状态时,它会覆盖我的片段容器中的用户界面元素:倒塌 https://developer.android.com/reference/android/support/design/widget/BottomSheetBehavior.html#STATE_COLLAPSED or EXPANDED https://developer.android.com/reference/android/support/design/widget/BottomSheetBehavior.html#STATE_EXPANDED

当 BottomSheet 展开时,覆盖部分片段是可以的,因为如果需要,用户可以将 BottomSheet 折叠到其查看状态。但是,我已明确禁止*用户隐藏 BottomSheet,因此需要一种方法来确保当 BottomSheet 处于折叠状态时片段容器始终保持在 BottomSheet 之上。照片胜过千言万语,希望以下内容能澄清这个问题


上图:经过编辑的片段屏幕截图,靠近屏幕底部有两个按钮 A 和 B。注意:该片段的根是滚动视图,这就是为什么按钮 B 被系统的“后退”和“主页”按钮切断的原因


上图:与上图相同的片段,但 BottomSheet 完全展开。作为参考,BottomSheet 是下面的所有内容,包括绿色条。注意:BottomSheet 覆盖按钮 A 和 B 是可以的,因为 BottomSheet 已完全展开


上图:与上图相同的片段,但 BottomSheet 处于折叠状态。注意:现在 BottomSheet 已完全折叠并且无法进一步折叠,可以看出问题在于它覆盖了按钮 B 的一部分,更重要的是片段在 BottomSheet 下方滚动


最初我希望通过子类化来解决问题AppBarLayout.ScrollingViewBehavior https://developer.android.com/reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html与此类似answer https://stackoverflow.com/a/40465215/1406986。遗憾的是我无法调整child view's height within CoordinatorLayout.Behavior#onDependentViewChanged https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.Behavior.html#onDependentViewChanged(android.support.design.widget.CoordinatorLayout,%20V,%20android.view.View)。当被调用时,child's height似乎未设置(-1)并添加一个OnLayoutChangedListener需要child to be final导致无法更新height一旦height在布局更改侦听器回调中定义。我仍然想使用子类来解决问题Behavior https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.Behavior.html但目前我很困惑

我的下一个想法是使用以下命令向我的每个片段布局添加一个“间隔”视图<include/>标签。然后我可以提供add/show and remove/hide辅助方法abstract需要显示 BottomSheet 的所有片段都将扩展的基本片段类。该间隔视图将以编程方式分配peek heightBottomSheet 的大小在片段内为其腾出空间。然后,BottomSheet 将覆盖间隔视图,这很好,因为我不认为它是片段可用视图区域的一部分。我目前正在努力实施这种方法,虽然我认为它会起作用,但我怀疑这是一个好的解决方案

欢迎任何意见、建议和潜在的解决方案,并提前致谢!

为了澄清,下面是我的顶级应用程序布局的精简版本

<android.support.v4.widget.DrawerLayout>

    <android.support.design.widget.CoordinatorLayout>

        <android.support.design.widget.AppBarLayout>

            <android.support.design.widget.CollapsingToolbarLayout>

                <ImageView ... />

                <android.support.v7.widget.Toolbar ... />
            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>

        <!-- All fragments assume the following view container via a FragmentTransaction's  
             replace method which in pseudocode looks something like
             FragmentTransaction.replace(R.id.main_activity_fragment_container,
             fragment, ...).commit();
        -->
        <FrameLayout android:id="@+id/main_activity_fragment_container" ... />

        <com.xyz.abc.view.BottomSheetView ... />

        <android.support.design.widget.FloatingActionButton ... />
    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.NavigationView ... />
</android.support.v4.widget.DrawerLayout>

*它出现BottomSheetBehavior#mHideable} is false默认情况下


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

片段内容下方是否存在持久性 BottomSheet? 的相关文章

随机推荐

  • 如何找到排列的索引

    index List Idx Predicate will get List with permutation and I want to know index of permutation For example index 4 1 3
  • Youtube Iframe API 不适用于移动设备?

    我很困惑 Youtube Iframe API 与标准示例 https developers google com youtube iframe api reference hl de https developers google com
  • 如何对我的自定义验证属性进行单元测试

    我有一个自定义的 asp net mvc 类验证属性 我的问题是如何对其进行单元测试 测试类是否具有该属性是一回事 但这实际上并不能测试其中的逻辑 这就是我想测试的 Serializable EligabilityStudentDebtsA
  • 删除向量类成员

    我有一个 A 类 其成员是另一个 B 类的对象指针向量 class A std vector
  • 在下载整个文件之前是否可以知道 MP3 的持续时间?

    这是一个关于MP3文件格式的问题 我一直在寻找一种获得 MP3 持续时间的方法 由于我使用 JLayer SPI 来解码 MP3 我发现在音频源是文件的情况下这是可能的 AudioFileFormat fileFormat AudioSys
  • 如何检查 $row['column_name'] 是否返回空 php mysql

    我有一个带有列的表格 id name phone describe 当我从这个表中获取值时 我正在使用 row mysql fetch array query 现在我想检查是否 row describe 返回空值 如何查看php 您可以使用
  • 在 Clearcase 上使用 Mercurial 时保留历史记录

    我在 ClearCase 商店工作 CC 在集成团队的工作方面做得很好 尽管我们的代码审查流程阻止我使用它来跟踪我的日常更改 在我的 CC 视图之上创建 hg 存储库效果非常好 我可以跟踪我的更改并轻松在文件服务器上进行备份 为人们生成差异
  • 多种语言的多种字体

    我最近在开发应用程序时遇到了一种情况 我必须在文本视图中显示不同的语言 目前我正在展示一些使用字体 字体像这样 Typeface tf Typeface createFromAsset this getAssets DroidHindi t
  • Rails:CSRF 令牌不工作但已设置

    我在 Heroku 上有我的 Rails 3 应用程序 当我发送银行信息时 我得到 WARNING Can t verify CSRF token authenticity但我的 CSRF 令牌已设置 https gist github c
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • Quarkus / CDI 和“java config”DI 定义

    我刚刚开始 quarkus 概念验证 容器启动时间太棒了 现在 我正在研究依赖注入部分 并找出选项 https quarkus io blog quarkus dependency injection https quarkus io bl
  • 为什么可以更改 const char* 变量的值?

    为什么下面的 C 代码可以工作 const char str NULL str test str test2 既然str是一个指向常量字符的指针 为什么我们可以给它分配不同的字符串文字呢 此外 我们如何保护str不被修改呢 例如 如果我们后
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • 如何使用 winforms 在 vb.net 中制作大型按钮网格(24x20 或类似)?

    我正在 vb net WinForms 中制作一个座位预订系统 我需要用户能够选择他们想要使用的座位并改变颜色 这样他们就可以知道它已选择 我开始尝试使用按钮 但 480 个按钮严重减慢了表单的加载时间 然后我尝试了在行 列中带有按钮的数据
  • onclick 函数上的 CSS 选择器

    有没有办法让CSS选择器onclick function 您可以在onclick https stackoverflow com questions 24365416 select element which have specific a
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • Python:使用 string.format() 将单词大写

    是否可以使用字符串格式将单词大写 例如 user did such and such format user foobar 应该返回 Foobar 做了这样那样的事情 请注意 我很清楚 capitalize 但是 这是我正在使用的代码 非常
  • 通过推送通知唤醒

    Suppose 有一些对象 例如 一个数组a 和依赖于对象的条件 例如 a empty 当前线程以外的某些线程可以操作该对象 a 因此条件评估值的真实性会随着时间的推移而变化 如何让当前线程在代码中的某个时刻休眠 并在条件满足时通过推送通知
  • 片段内容下方是否存在持久性 BottomSheet?

    Using a 持久底表 https material google com components bottom sheets html bottom sheets persistent bottom sheets 在一个协调器布局 htt