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

最佳答案

TextViewpaddingTop设置为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/

相关文章:

android - 添加约束布局障碍在Android Android Studio的上下文菜单中丢失

java - isGooglePlayServicesAvailable 返回 9

Android 动画 - 按钮保持可点击状态

android - Gradle 同步失败找不到约束布局 :1. 0.0-alpha2

android - 在 ConstraintLayout 中使用 FrameLayout

android - ConstraintLayout GONE View 占用空间

java - 如何读取旋转器并从编辑文本获取数据到 TextView ?

java - Android : Should I remove @Override from facebook. java?

android - "java.lang.IllegalStateException: not connected to MediaScannerService"在Android中添加文件到媒体库时

android - 如何在 WebView 下方放置广告