如何使用约束布局对齐两个文本视图,其中一个文本视图具有填充?
How can I align two textviews where one of them has padding using constraint layout?
我想实现如下布局
底部布局 TextView
有一个可绘制的圆角矩形作为背景。我想将 TextView
内的文本与顶部文本对齐。目前发生的情况是圆角边缘与文本而不是实际文本对齐。
关于如何使用 ConstraintLayout
实现这个的任何想法?我尝试设置 layout_constraintStart_toStartOf
上面的文本并设置负填充,但我想约束在这里优先并忽略填充。
这是完整的 xml 布局:
<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="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/trip_type_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:tint="@color/oslo_gray"
app:layout_constraintBottom_toBottomOf="@+id/trip_month"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/trip_date"
app:srcCompat="@drawable/ic_car_pickup" />
<View
android:id="@+id/divider"
android:layout_width="1dp"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:background="@color/oslo_gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/trip_type_icon" />
<TextView
android:id="@+id/trip_date"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textColor="@color/shark"
app:layout_constraintEnd_toEndOf="@+id/trip_month"
app:layout_constraintStart_toEndOf="@+id/trip_type_icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="5" />
<TextView
android:id="@+id/trip_month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="4dp"
android:textColor="@color/emperor"
app:layout_constraintBottom_toBottomOf="@+id/trip_timeline_subtitle"
app:layout_constraintStart_toEndOf="@+id/trip_type_icon"
app:layout_constraintTop_toBottomOf="@+id/trip_date"
tools:text="Sep" />
<TextView
android:id="@+id/trip_timeline_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textColor="@color/shark"
app:layout_constraintEnd_toStartOf="@+id/navigate_arrow"
app:layout_constraintStart_toEndOf="@+id/trip_date"
app:layout_constraintTop_toTopOf="parent"
tools:text="PVG -> PEK" />
<TextView
android:id="@+id/trip_timeline_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginBottom="48dp"
android:textColor="@color/emperor"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/trip_timeline_title"
app:layout_constraintStart_toEndOf="@+id/trip_date"
app:layout_constraintTop_toBottomOf="@+id/trip_timeline_title"
tools:text="2:10pm - 4:45pm" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/navigate_arrow"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@+id/trip_timeline_subtitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/trip_timeline_title"
app:layout_constraintTop_toTopOf="@+id/trip_timeline_title"
app:srcCompat="@drawable/ic_arrow_right_vector" />
<TextView
android:id="@+id/trip_timeline_flight_layover"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/rounded_rectangle_radius_12dp"
android:textColor="@color/emperor"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/navigate_arrow"
app:layout_constraintStart_toStartOf="@+id/trip_timeline_subtitle"
app:layout_constraintTop_toBottomOf="@id/trip_timeline_subtitle"
tools:background="@drawable/rounded_rectangle_radius_12dp"
tools:text="2h 25m Layover at PEK"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
可绘制的圆角矩形 rounded_rectangle_radius_12dp
:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:tint="@color/porcelain">
<corners android:radius="12dp" />
<padding android:left="12dp"
android:right="12dp"
android:top="2dp"
android:bottom="2dp"/>
</shape>
我会在你的 trip_timeline_flight_layover
TextView
而不是你的 drawable 中定义填充:
<TextView
android:id="@+id/trip_timeline_flight_layover"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:background="@drawable/rounded_rectangle_radius_12dp"
android:textColor="@color/emperor"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/navigate_arrow"
app:layout_constraintStart_toStartOf="@+id/trip_timeline_subtitle"
app:layout_constraintTop_toBottomOf="@id/trip_timeline_subtitle"
tools:background="@drawable/rounded_rectangle_radius_12dp"
tools:text="2h 25m Layover at PEK"
tools:visibility="visible" />
然后将 trip_timeline_title
的 layout_marginStart
设置为等于 layover``TextView
的填充,在这种情况下,12dp
。
编辑:
实际上我认为您不必在 TextView
中定义内边距,只要使标题的边距等于侧边距就可以了。
我想实现如下布局
底部布局 TextView
有一个可绘制的圆角矩形作为背景。我想将 TextView
内的文本与顶部文本对齐。目前发生的情况是圆角边缘与文本而不是实际文本对齐。
关于如何使用 ConstraintLayout
实现这个的任何想法?我尝试设置 layout_constraintStart_toStartOf
上面的文本并设置负填充,但我想约束在这里优先并忽略填充。
这是完整的 xml 布局:
<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="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/trip_type_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:tint="@color/oslo_gray"
app:layout_constraintBottom_toBottomOf="@+id/trip_month"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/trip_date"
app:srcCompat="@drawable/ic_car_pickup" />
<View
android:id="@+id/divider"
android:layout_width="1dp"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:background="@color/oslo_gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/trip_type_icon" />
<TextView
android:id="@+id/trip_date"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textColor="@color/shark"
app:layout_constraintEnd_toEndOf="@+id/trip_month"
app:layout_constraintStart_toEndOf="@+id/trip_type_icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="5" />
<TextView
android:id="@+id/trip_month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="4dp"
android:textColor="@color/emperor"
app:layout_constraintBottom_toBottomOf="@+id/trip_timeline_subtitle"
app:layout_constraintStart_toEndOf="@+id/trip_type_icon"
app:layout_constraintTop_toBottomOf="@+id/trip_date"
tools:text="Sep" />
<TextView
android:id="@+id/trip_timeline_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textColor="@color/shark"
app:layout_constraintEnd_toStartOf="@+id/navigate_arrow"
app:layout_constraintStart_toEndOf="@+id/trip_date"
app:layout_constraintTop_toTopOf="parent"
tools:text="PVG -> PEK" />
<TextView
android:id="@+id/trip_timeline_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginBottom="48dp"
android:textColor="@color/emperor"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/trip_timeline_title"
app:layout_constraintStart_toEndOf="@+id/trip_date"
app:layout_constraintTop_toBottomOf="@+id/trip_timeline_title"
tools:text="2:10pm - 4:45pm" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/navigate_arrow"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@+id/trip_timeline_subtitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/trip_timeline_title"
app:layout_constraintTop_toTopOf="@+id/trip_timeline_title"
app:srcCompat="@drawable/ic_arrow_right_vector" />
<TextView
android:id="@+id/trip_timeline_flight_layover"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/rounded_rectangle_radius_12dp"
android:textColor="@color/emperor"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/navigate_arrow"
app:layout_constraintStart_toStartOf="@+id/trip_timeline_subtitle"
app:layout_constraintTop_toBottomOf="@id/trip_timeline_subtitle"
tools:background="@drawable/rounded_rectangle_radius_12dp"
tools:text="2h 25m Layover at PEK"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
可绘制的圆角矩形 rounded_rectangle_radius_12dp
:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:tint="@color/porcelain">
<corners android:radius="12dp" />
<padding android:left="12dp"
android:right="12dp"
android:top="2dp"
android:bottom="2dp"/>
</shape>
我会在你的 trip_timeline_flight_layover
TextView
而不是你的 drawable 中定义填充:
<TextView
android:id="@+id/trip_timeline_flight_layover"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:background="@drawable/rounded_rectangle_radius_12dp"
android:textColor="@color/emperor"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/navigate_arrow"
app:layout_constraintStart_toStartOf="@+id/trip_timeline_subtitle"
app:layout_constraintTop_toBottomOf="@id/trip_timeline_subtitle"
tools:background="@drawable/rounded_rectangle_radius_12dp"
tools:text="2h 25m Layover at PEK"
tools:visibility="visible" />
然后将 trip_timeline_title
的 layout_marginStart
设置为等于 layover``TextView
的填充,在这种情况下,12dp
。
编辑:
实际上我认为您不必在 TextView
中定义内边距,只要使标题的边距等于侧边距就可以了。