android - 如何让两个TextView彼此对齐为 "wrap_content"但又在ConstraintLayout的约束范围内而不互相溢出?

标签 android android-layout android-constraintlayout android-design-library

我有两个彼此相邻对齐的 TextView ,如下所示: Here is the image, I am not allowed to embed it for now

如果我尝试增加第一个 TextView 的文本,我当前的布局工作正常,它仍然在应有的约束内。 Here is it how it looks这很好。

但是当我尝试做与此完全相反的事情时,即增加第二个 textView 的宽度,我希望第一个 textView 保持在原位,但同样的情况不会发生并且会溢出。 It goes out of bounds like this.

所以我不明白我做错了什么?我希望两个 textView 都能在约束范围内占据可用的任何空间。有人可以指导我哪里出错了吗? 两个 textView 都相互链接。

这是我当前的 XML 代码。

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

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

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

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guidelineTop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.04" />

    <TextView
        android:id="@+id/tvStart"
        style="@style/StyleRegular"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:text="Text A"
        android:textSize="20sp"
        app:layout_constrainedWidth="true"
        app:layout_constraintEnd_toStartOf="@id/tvEnd"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toStartOf="@id/guidelineStart"
        app:layout_constraintTop_toTopOf="@id/guidelineTop" />

    <TextView
        android:id="@+id/tvEnd"
        style="@style/StyleRegular"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:text="Text B Text B Text B Text B Text B T"
        app:layout_constrainedWidth="true"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
        app:layout_constraintStart_toEndOf="@id/tvStart"
        app:layout_constraintTop_toTopOf="@id/guidelineTop" />

</androidx.constraintlayout.widget.ConstraintLayout>

最佳答案

你可以尝试这样的事情

<?xml version="1.0" encoding="utf-8"?>
<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">

  <TextView
    android:id="@+id/tvStart"
    style="@style/TextAppearance.AppCompat.Body1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:ellipsize="end"
    android:maxLines="1"
    app:layout_constraintEnd_toStartOf="@id/tvEnd"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    tools:text="Text A Text A Text" />

  <TextView
    android:id="@+id/tvEnd"
    style="@style/TextAppearance.AppCompat.Body1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:ellipsize="end"
    android:maxLines="1"
    app:layout_constraintStart_toEndOf="@id/tvStart"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    tools:text="Text B Text B Text B Text B Text B T" />

</androidx.constraintlayout.widget.ConstraintLayout>

这是布局的样子。您可以将 layout_width0dp 更改为 wrap_content 并查看它如何在 2 个 View 之间发挥作用,以达到您想要的位置。

screenshot

关于android - 如何让两个TextView彼此对齐为 "wrap_content"但又在ConstraintLayout的约束范围内而不互相溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67158277/

相关文章:

android - dp 和 dip 有什么区别?

java - Android 软键盘重叠按钮(屏幕截图)

android - 左上角的 ConstraintLayout View

android - RecyclerView 项目超出边距范围

android - 约束布局和 ScrollView 不起作用

Android 支持库 23.4.0 : android. support.v7.widget.TintContextWrapper 无法转换到 Activity

android - 仅将视频加载到 VideoView 中而不立即播放

android - 权限拒绝 : opening provider

android - 将 SharedPreferences 用于 transient 应用程序状态是否被认为是不好的做法?

android - 如何使用 RecyclerView 在 DrawerLayout、Toolbar 和 ViewPager 布局中折叠工具栏?