我试图让一个图标在约束布局内居中,同时让它始终停留在约束布局底部的一些 TextView 上(这是我的实际问题的一个非常简化的版本,但同样代表了问题) .底部的文本可以足够大以覆盖布局的中心,在这种情况下我希望图标向上移动。
为了将图标的底部与中心和 TextView 的顶部相关联,我在布局的中心使用了一个辅助线,并使用了一个屏障来捕捉 TextView 的顶部或辅助线的顶部,以两者为准更高。
问题是一半的图标在指南之下,所以文本仍然被图标覆盖。当 TextView 的顶部超过指南时,图标只会向上移动。或者,我可以将图标的底部设置在指南的顶部,这样 TextView 永远不会重叠,但图标不会完全居中。
这是包含所有项目的布局的当前状态:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="200dp">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_play"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/barrier"
app:layout_constraintBottom_toBottomOf="@id/barrier"
/>
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="top"
app:constraint_referenced_ids="guide,text" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Possimus nulla molestias maxime. Distinctio perferendis veniam modi sint numquam dolores esse. Minus consequuntur mollitia asperiores praesentium non minus. Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Et dolor sit voluptatem fugit."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
我找到了一个(不是很好的)解决方案,它向 TextView 添加了 ImageView 一半大小的顶部填充。我宁愿避免这样的黑客攻击,而是找到一个好的实现。可能吗?
为了帮助理解这个问题,这里有一些来自 Android Studio 中的 UI 设计器的图片:
带有简短文本的有希望的结果:
当文本很长时会导致问题:
如果文本较短时图标未居中:
当文本很长时,我们不会遇到问题:
最佳答案
将TextView
的paddingTop
设置为ImageView
的一半
<TextView
android:id="@+id/text"
android:paddingTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Possimus nulla molestias maxime. Distinctio perferendis veniam modi sint numquam dolores esse. Minus consequuntur mollitia asperiores praesentium non minus. Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Et dolor sit voluptatem fugit."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
关于android - 除非重叠 TextView ,否则是否可以使图标在约束布局中居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56394834/