Это действительно простая раскладка, и ее легко достичь с помощью constraintLayout
.Я не включаю FrameLayout
и LinearLayout
, которые вы использовали в качестве оберток.Вы можете добавить их в качестве оболочки с той же шириной и высотой, что и TextView
, и это не повлияет на макет.Здесь вы идете -
<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:orientation="vertical">
<TextView
android:id="@+id/hello"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light"
android:gravity="center"
android:text="Hello"
android:textSize="25sp"
app:layout_constraintEnd_toStartOf="@id/world"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/world"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="@android:color/holo_purple"
android:gravity="center"
android:text="World"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Когда вы устанавливаете app:layout_constraintEnd_toEndOf="parent"
для второго макета («Мир»), он выравнивает макет до конца (справа).Я установил его пользовательскую ширину с android:layout_width="100dp"
.
Для первого макета («Привет») вы будете использовать
app:layout_constraintEnd_toStartOf="@id/world"
app:layout_constraintStart_toStartOf="parent"
с android:layout_width="0dp"
.0dp на самом деле не будет устанавливать ширину равной 0, но будет растягивать ее между своими ограничениями.Таким образом, в этом случае он установит начало (слева) на начало родителя, а конец установит начало (слева) 2-го макета.Таким образом, он просто растянется до этого макета.
Вот как это выглядит -
![Sample layout of above xml with blueprint](https://i.stack.imgur.com/JRnHB.png)