Android 文本视图被推到父布局之外

Android 文本视图被推到父布局之外,android,android-layout,android-constraintlayout,Android,Android Layout,Android Constraintlayout,我正在建立一个这样的时间表 可以使用水平偏移移动中心圆,中心圆可以位于第一个或最后一个圆的顶部,也可以位于两者之间的任何位置 它是使用ConstraintLayout构建的,属于中心节点的日期在其下方居中,使用圆的起点和终点作为约束 如果将中心节点移动到最右侧,则如下所示 我的问题是TextView已被移出父布局。是否可以像我所做的那样将其约束到中心节点,但强制它为一条线并且始终在父布局内 编辑 这里是XML。这似乎是一个非常普通的问题,所以我没想到会需要XML <androidx.c

我正在建立一个这样的时间表

可以使用水平偏移移动中心圆,中心圆可以位于第一个或最后一个圆的顶部,也可以位于两者之间的任何位置

它是使用
ConstraintLayout
构建的,属于中心节点的日期在其下方居中,使用圆的起点和终点作为约束

如果将中心节点移动到最右侧,则如下所示

我的问题是
TextView
已被移出父布局。是否可以像我所做的那样将其约束到中心节点,但强制它为一条线并且始终在父布局内

编辑

这里是XML。这似乎是一个非常普通的问题,所以我没想到会需要XML

<androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/timeline_layout"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/goal_chart_inner_layout"
            app:layout_constraintTop_toTopOf="parent">

            <!-- START -->
            <TextView
                android:textSize="12sp"
                android:id="@+id/fast_started_datetime_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                app:layout_constraintBottom_toTopOf="@+id/timeline_start_node"
                app:layout_constraintStart_toStartOf="@+id/timeline_start_node"
                toots:text="STARTED" />

            <ImageView
                android:layout_marginStart="15dp"
                android:id="@+id/timeline_start_node"
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:background="@drawable/circle_background"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />


            <!-- 1 EDGE -->
            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="0dp"
                android:layout_height="5dp"
                android:layout_marginStart="@dimen/timeline_edge_padding"
                android:layout_marginEnd="@dimen/timeline_edge_padding"
                android:background="@drawable/circle_background"
                app:layout_constraintBottom_toBottomOf="@+id/timeline_start_node"
                app:layout_constraintEnd_toStartOf="@id/timeline_split_node"
                app:layout_constraintStart_toEndOf="@id/timeline_start_node"
                app:layout_constraintTop_toTopOf="@+id/timeline_end_node" />


            <!-- SPLIT -->
            <ImageView
                android:id="@+id/timeline_split_node"
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:layout_marginStart="15dp"
                android:layout_marginEnd="15dp"
                android:background="@drawable/circle_background"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.84"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView

                android:id="@+id/fast_goal_datetime_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:textSize="12sp"
                app:layout_constraintEnd_toEndOf="@+id/timeline_split_node"
                app:layout_constraintStart_toStartOf="@+id/timeline_split_node"
                app:layout_constraintTop_toBottomOf="@+id/timeline_split_node"
                toots:text="GOAL - TEST - LONG" />

            <!-- 2 EDGE -->
            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="0dp"
                android:layout_height="5dp"
                android:layout_marginStart="@dimen/timeline_edge_padding"
                android:layout_marginEnd="@dimen/timeline_edge_padding"
                android:background="@drawable/circle_background"
                app:layout_constraintBottom_toBottomOf="@+id/timeline_start_node"
                app:layout_constraintEnd_toStartOf="@id/timeline_end_node"
                app:layout_constraintStart_toEndOf="@id/timeline_split_node"
                app:layout_constraintTop_toTopOf="@+id/timeline_end_node" />


            <!-- END -->
            <TextView
                android:textSize="12sp"
                android:id="@+id/fast_ended_datetime_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                app:layout_constraintBottom_toTopOf="@+id/timeline_end_node"
                app:layout_constraintEnd_toEndOf="@+id/timeline_end_node"
                toots:text="ENDED" />

            <ImageView
                android:layout_marginEnd="15dp"
                android:id="@+id/timeline_end_node"
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:background="@drawable/circle_background"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />



        </androidx.constraintlayout.widget.ConstraintLayout>

移动圆时,以编程方式将textview的约束更改为父布局的末尾:

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.connect(R.id.your_textview,ConstraintSet.END,R.id.the_parent_layout,ConstraintSet.END,0);
constraintSet.applyTo(yourConstraintLayout);
查看以了解更多详细信息。

@lukas hansen 如果要将TextView与中心对齐,可以执行以下操作:

<TextView
  android:textSize="12sp"
  android:id="@+id/fast_ended_datetime_text"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginBottom="8dp"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintEnd_toEndOf="parent"
  tools:text="ENDED" />

注意:这将在两条边上将TextView约束为父视图。
另外,将层次结构中TextView上方某个视图的top_指定给\u bottom_

如果您愿意发布您的xml代码,那么将更容易帮助您:)提供布局的xml,我们可以更好地提供帮助。您很可能缺少约束。链接未打开是类似问题的答案。可能有什么东西可以用。@Cheticamp谢谢!那正是我要找的!最后,我给了标签与其参照的圆相同的约束,并给了它相同的水平偏移。这将标签稍微偏离中心,但看起来比以前好多了。这不是一个完美的解决方案,我一定会仔细查看您的链接,并尽快尝试实现它。