我正在试着把ImageView分和TextView分对齐,但我很难得到预期的结果.

TextView可以有多行,因此我使用android:layout_width="0dp".然而,正因为如此,ImageViewTextView之间的差距太大了:

Result with layout_width=

如果我不使用android:layout_width="0dp",而是设置layout_width="wrap_content",如果有足够的屏幕空间,我会得到预期的结果:

Result with layout_width=

在较小的屏幕中,TextView没有分割成多行,因此超出了父视图的限制:

Result with layout_width=

我也试着使用TextViewandroid:drawableLeft="@drawable/vc_estadio"属性,但可绘制的太大了:

Result with android:drawableLeft=

最后,我也try 了调整可绘制的大小,但我遇到了与android:layout_width="0dp"相同的问题.图像与文本距离太远:

Result with android:drawableLeft=

我预计在小屏幕上会出现这样的场景:

Expected result in small screens

这是一个更大的版本:

Expected result in big screens

我正在使用并try 运行的代码如下:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/estadioImageView"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_marginEnd="8dp"
        android:src="@drawable/vc_estadio"
        app:layout_constraintBottom_toBottomOf="@+id/estadioTextView"
        app:layout_constraintEnd_toStartOf="@+id/estadioTextView"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/estadioTextView" />

    <TextView
        android:id="@+id/estadioTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:autoSizeTextType="uniform"
        android:gravity="center"
        android:maxLines="2"
        android:text="Estadio Pedro Garrido (Jerez de la Frontera)"
        android:textColor="@color/gray_dark"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/estadioImageView"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

提前感谢您的帮助!

推荐答案

使用android:layout_width="0dp",因为您使用的是wrap_content,所以宽度限制不起作用,所以当文本很长时,它会移到外部,而不是转到下一行.

使用ImageView来显示图像,就像在drawableLeft中一样,您无法控制大小.

Final code :

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/start_guideline"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.08" />

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/end_guideline"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.92" />


<ImageView
    android:id="@+id/estadioImageView"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:layout_marginEnd="8dp"
    android:src="@drawable/female_icon"
    app:layout_constraintBottom_toBottomOf="@+id/estadioTextView"
    app:layout_constraintEnd_toStartOf="@+id/estadioTextView"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toEndOf="@id/start_guideline"
    app:layout_constraintTop_toTopOf="@+id/estadioTextView" />

<TextView
    android:id="@+id/estadioTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:autoSizeTextType="uniform"
    android:maxLines="2"
    android:text="Estadio Pedro Garrido (Jerez de la Frontera) "
    android:textAlignment="textStart"
    android:textColor="@color/gray"
    android:textSize="20sp"
    app:layout_constrainedWidth="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@id/end_guideline"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/estadioImageView"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0" />

</androidx.constraintlayout.widget.ConstraintLayout>

NOTE : UPDATE THE DRAWABLES USED AS I HAVE USED SAMPLE DRAWABLES

Final Output : enter image description here

Android相关问答推荐

打开平板电脑的下载文件夹中的文件,例如使用其mimeType将Intent发送到我们的应用程序

如何在Jetpack导航中不显示目的地?

使用Kotlin/Compose与Java/XML指南的比较

在Jetpack Compose中,如何判断屏幕是否已重新组合?

在柯特林连续测量网速

如何修复Google Play市场中有关已删除广告库的错误消息?

如何在Jetpack Compose中将对象的移动从一个路径平滑地切换到另一个路径?

(已解决)从最近的应用程序打开应用程序时出错

警告:应用必须面向 Android 13(API 级别 33)或更高版本.确实如此

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

块不起作用,出现 "只有安全的 (?.)... " 错误

减少Compose中可滚动选项卡之间的间距

Android 访问任意公共目录

Android 模拟器 Wifi 连接没有互联网

如何在 Delphi 和 Android 上避免 Indy Socket Error #13 Access denied 异常?

当手表与手机断开连接时,有没有办法在我的 Wear OS 应用程序中显示操作系统级别的图标?

Kotlin:如何在另一个变量的名称中插入一个变量的值

如何在jetpack compose中创建自定义rememberState?

如何从构建的流对象中发出值

使用 Android 字符串数组在 Room 中迁移