android - 除非重叠 TextView ,否则是否可以在约束布局中将图标居中

原文 标签 android android-constraintlayout

我试图将一个图标保持在约束布局内的中心,同时使其始终停留在约束布局底部的某个 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 设计器的一些图像:

短文本的有希望的结果:
Icon centered, short text not overlapped

当文本很长时会导致问题:
Icon shifted upwards, long text overlapped

如果文本较短时图标未居中:
Icon not centered, short text not overlapped

当文本很长时,我们不会遇到问题:
Icon shifted upwards, long text not overlapped

最佳答案

设置paddingTopTextViewImageView 的一半

<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/

相关文章:

java - 如何在以指数显示之前确定 DecimalFormat 的最大大小?

android - FragmentPagerAdapter - 避免重新创建 fragment 的 View

Android Constraint Layout inside Scrollview inside Constraint Layout

android - Android:使用Kotlin的可点击图像水平 slider

Android - 约束布局 - 如何对齐以其他 View 边缘为中心的 View ?

java - 如何在 ConstraintLayout 类中对 XML 布局进行 android 膨胀?

java - 如何通过 App Resume 上的 Activity 实例化 Fragment 或将对象重新加载到内存中?

android - 如何在android的WebView中将参数发送到本地文件?

java - Android:Java不能引用非最终变量

android - 约束布局未对齐textview