Как центрировать вид в ConstraintLayout, не перекрывая неровных соседей - PullRequest
0 голосов
/ 12 июня 2019

Я использую пользовательский макет для строки заголовка, основанный на ConstraintLayout. Мне нужно центрировать текст заголовка, не перекрывая кнопки с обеих сторон. В настоящее время заголовок расположен по центру между боковыми кнопками, но поскольку они имеют разную ширину, заголовок не центрируется в родительском представлении.

Вот как это выглядит в настоящее время (по центру между двумя кнопками, а не по центру в родительском элементе):

Current title bar layout

Есть ли способ центрировать заголовок внутри родительского элемента, при этом он не должен перекрывать текст кнопки с обеих сторон (поскольку это может измениться)?

Чтобы сделать его более сложным, я также хотел бы, чтобы заголовок сжимался вместо текста кнопки, если не хватает места для отображения в полном объеме.

Если я ограничу оба края моего заголовка родителем и установлю для него ширину переноса, то это почти сработает, пока текст кнопки не станет немного длиннее.

Ответы [ 3 ]

2 голосов
/ 12 июня 2019

Для центрирования вида вы можете задать layout_width = "0dp" при соединении двух сторон вида с другими видами. Тогда центральный вид занимает столько же места, сколько осталось для вида

Обновление

Если вы хотите центрироваться внутри родителя, тогда вид других пользователей будет вашим родителем.

android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:ellipsize = "end"
android:maxLines = "1"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toStartOf = "parent"
0 голосов
/ 12 июня 2019

Вы должны начать с центра, затем идти налево и направо.

Попробуйте приведенное ниже решение, оно должно работать как положено

<android.support.constraint.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/btn_at_the_start"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:gravity="center"
            android:text="Awards"
            app:layout_constraintEnd_toStartOf="@+id/tv_in_the_middle"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent="0.2" />

        <TextView
            android:id="@+id/tv_in_the_middle"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:ellipsize="end"
            android:gravity="center"
            android:textAlignment="center"
            android:padding="5dp"
            android:maxLines="2"
            android:text="Nominations"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent="0.6" />

        <ImageButton
            android:id="@+id/ibtn_at_the_end"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:background="@android:color/transparent"
            android:gravity="center_horizontal"
            android:src="@drawable/ic_add_white"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/tv_in_the_middle"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent="0.2" />
    </android.support.constraint.ConstraintLayout>
0 голосов
/ 12 июня 2019

вы можете использовать

  1. приложение: layout_constraintTop_toTopOf
  2. приложение: layout_constraintStart_toStartOf

, как показанониже

<TextView android:id="@+id/nomination" 
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
app:layout_constraintTop_toTopOf="@+id/someId1" 
app:layout_constraintBottom_toBottomOf="@+id/someId2" 
app:layout_constraintStart_toStartOf="@+id/awards" 
app:layout_constraintEnd_toEndOf="parent"/>
...