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_height
和layout_width
设置为wrap_content
。
<View
android:id="@+id/view"
android:layout_
android:layout_/>
然后将这个空视图链接到BottomSheet
。
【讨论】:
您的意思是说我应该将此视图添加到我的BottomSheet
,使其完全透明,并设置一个高度以伪造相当于我的ImageView
一半高度的边距?从视觉上讲,这可以工作。我想,比我目前使用填充的解决方案更好。但是还是太hacky了。我认为 API 中有一些东西......谢谢,我会试试你的解决方案 ;-)
是的。你不需要让它不可见。它不会在您的布局中占用任何空间,它就在那里而不会干扰任何东西。当指定 layout_weight 时,同样的东西用于在 LinearLayout 中均匀地分隔事物。你可以在任何你想要的地方放置一个空视图!
好的,谢谢。我走得更远。我将ImageView
包装成一个简单的FrameLayout
和wrap_content
用于硬件。在我的图像内部使用底部边距可以解决问题,并且比使用填充要干净得多。特别是因为我打算收听该图像上的点击事件!这样感觉不那么hacky。我将验证您的解决方案,但人们应该阅读我们的 cmets。感谢您的帮助!
下边距可以使用,但如果是平板电脑怎么办?如果方向改变了怎么办?你检查了吗?将您的设备置于横向并检查边距是否有效?我很确定你的布局看起来会乱七八糟!
横向工作,但不是预期用途。我的项目现在允许使用景观。以上是关于Android BottomSheet 覆盖了锚定 ImageView 的一半的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Kotlin 中创建 BottomSheet
圆角不适用于 Material Design Bottomsheet Android [重复]