Android BottomSheet 覆盖了锚定 ImageView 的一半

Posted

技术标签:

【中文标题】Android BottomSheet 覆盖了锚定 ImageView 的一半【英文标题】:Android BottomSheet covers half of anchored ImageView 【发布时间】:2019-06-04 13:28:14 【问题描述】:

我有一个CoordinatorLayout,其中我有一个BottomSheet 和一个ImageView

这是我的 BottomSheett

<include layout="@layout/bottom_sheet_layout"
    android:id="@+id/bottom_sheet"
    android:layout_
    android:layout_
    app:behavior_hideable="false"
    app:behavior_peekHeight="80dp"
    app:layout_behavior="@string/bottom_sheet_behavior"/>

这是我的ImageView

<androidx.appcompat.widget.AppCompatImageView
    android:id="@+id/image_location_crosshairs"
    android:layout_
    android:layout_
    android:layout_marginEnd="20dp"
    android:layout_marginRight="20dp"
    app:layout_anchorGravity="top|end"
    app:layout_anchor="@id/bottom_sheet"
    app:srcCompat="@drawable/my_svg_icon"/>

无论我的 XML 布局中的视图顺序如何,我总是得到相同的结果:我的 ImageView 很好地锚定到了底页,但锚点位于图像的中心。

我想知道如何将图像底部而不是其中心锚定。 尝试应用任何类型的底边距只会让底页滑动,直到到达图像中心,然后再制作图像幻灯片。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您可以创建一个空的View,将layout_heightlayout_width 设置为wrap_content

<View
    android:id="@+id/view"
    android:layout_
    android:layout_/>

然后将这个空视图链接到BottomSheet

【讨论】:

您的意思是说我应该将此视图添加到我的BottomSheet,使其完全透明,并设置一个高度以伪造相当于我的ImageView 一半高度的边距?从视觉上讲,这可以工作。我想,比我目前使用填充的解决方案更好。但是还是太hacky了。我认为 API 中有一些东西......谢谢,我会试试你的解决方案 ;-) 是的。你不需要让它不可见。它不会在您的布局中占用任何空间,它就在那里而不会干扰任何东西。当指定 layout_weight 时,同样的东西用于在 LinearLayout 中均匀地分隔事物。你可以在任何你想要的地方放置一个空视图! 好的,谢谢。我走得更远。我将ImageView 包装成一个简单的FrameLayoutwrap_content 用于硬件。在我的图像内部使用底部边距可以解决问题,并且比使用填充要干净得多。特别是因为我打算收听该图像上的点击事件!这样感觉不那么hacky。我将验证您的解决方案,但人们应该阅读我们的 cmets。感谢您的帮助! 下边距可以使用,但如果是平板电脑怎么办?如果方向改变了怎么办?你检查了吗?将您的设备置于横向并检查边距是否有效?我很确定你的布局看起来会乱七八糟! 横向工作,但不是预期用途。我的项目现在允许使用景观。

以上是关于Android BottomSheet 覆盖了锚定 ImageView 的一半的主要内容,如果未能解决你的问题,请参考以下文章

将覆盖设置为假后,锚定覆盖不隐藏?扑

Android 原生BottomSheet 介绍及坑

如何在 Android Kotlin 中创建 BottomSheet

圆角不适用于 Material Design Bottomsheet Android [重复]

ActionBar 下方的 Persistent BottomSheet

Android两种方法使用BottomSheet