Подтвердить что ты не робот

Центрировать несколько элементов в RelativeLayout, не помещая их в контейнер?

У меня есть RelativeLayout, содержащий пару бок о бок кнопок, которые я хочу сосредоточить в макете. Я мог бы просто поместить кнопки в LinearLayout и center, что в RelativeLayout, но я хочу, чтобы мой xml был как можно чище.

Здесь я попробовал, это просто помещает кнопку "применить" в центр и кнопку "отменить" слева от нее:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15sp">
  <TextView
    android:id="@+id/instructions"
    android:text="@string/instructions"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="15sp"
    android:layout_centerHorizontal="true"
    />
  <Button
    android:id="@+id/apply"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="@string/apply"
    android:textSize="20sp"
    android:layout_below="@id/instructions"
    />
  <Button
    android:id="@+id/undo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="@string/undo"
    android:textSize="20sp"
    android:layout_toLeftOf="@id/apply"
    android:layout_below="@id/instructions"
    />
</RelativeLayout>
4b9b3361

Ответ 1

android:gravity выравнивает содержимое внутри view или layout, в котором он используется.

android:layout_gravity выровнят view или layout внутри своего родителя.

Итак, добавив

android:gravity="center"

в ваш RelativeLayout должен сделать трюк...

Вот так:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_marginTop="15sp">

</RelativeLayout>

Ответ 2

Вот расширение ответа BrainCrash. Это не вложенная опция, которая группирует и центрирует все три горизонтально и вертикально. Кроме того, он занимает верхний TextView и центрирует его горизонтально по обеим кнопкам. При желании вы можете центрировать текст в TextView с помощью android: gravity = "center". Я также удалил поля, добавил цвет и установил высоту RelativeLayout для fill_parent, чтобы выделить макет. Протестировано на API 11.

<RelativeLayout
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:gravity="center"
  android:background="@android:color/black"
  >
  <TextView
    android:id="@+id/instructions"
    android:text="TEST"
    android:textSize="20sp"
    android:background="@android:color/darker_gray"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignLeft="@+id/undo"
    android:layout_alignRight="@+id/apply"
    android:gravity="center"
    />
  <Button
    android:id="@+id/apply"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="APPLY"
    android:textSize="20sp"
    android:layout_below="@id/instructions"
    />
  <Button
    android:id="@+id/undo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="UNDO"
    android:textSize="20sp"
    android:layout_toLeftOf="@id/apply"
    android:layout_below="@id/instructions"
    />
</RelativeLayout>

Ответ 3

android:layout_gravity="center"

почти даст то, что вы ищете.

Ответ 4

Вот комбинация вышеприведенного ответа, которая решила мою конкретную ситуацию:

Центрирование двух отдельных меток в макете, в которое также входит кнопка в левой позиции самого же макета (кнопка, метка, ярлык слева направо, где метки расположены по центру относительно макета, содержащего все три вида - то есть кнопка не выталкивает метки по центру).

Я решил это, вложив два RelativeLayout, где внешний макет включал Кнопка и внутренний-RelativeLayout.

Inner-RelativeLayout содержит две текстовые метки (TextView).

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

см. RelativeLayout Gravity не применяется? и    Гравитация и layout_gravity на Android для разницы между гравитацией и layout_gravity.

Настройте paddingLeft на кнопке btn_button1, чтобы увидеть, что TextView не перемещается.

(Извиняюсь, что hasxz для downvotes. Я был слишком поспешным, думая, что только b/c ваши предложения не решают вопрос, который задают, что они помогают решить очень похожие ситуации (ответ здесь решает очень конкретная ситуация, и только комбинация всех этих ответов решила мою проблему. Я попробовал upvoting, но это не позволит мне, если я не отредактирую ответ, который я не хочу делать.)

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/rl_outer"
  android:layout_width="fill_parent"
  android:layout_height="50dip"
  android:background="#FF0000FF">

  <Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/btn_button1"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:background="#FF00FF00"
    android:text="&lt;"
    android:textSize="20sp"
    android:paddingLeft="40dip"/>

  <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_inner"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:background="#FFFF00FF"        
    android:layout_centerInParent="true"
    android:gravity="center">      

    <TextView
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/tv_text1"
      android:layout_width="wrap_content"
      android:layout_height="fill_parent"
      android:background="#FF505050"
      android:textSize="20sp"
      android:textColor="#FFFFFFFF"
      android:text="Complaint #"
      android:gravity="center"/>     

    <TextView
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/tv_text2"
      android:layout_width="wrap_content"
      android:layout_height="fill_parent"
      android:background="#FF505050"
      android:textSize="20sp"
      android:textColor="#FFFFFFFF"
      android:layout_toRightOf="@id/tv_text1"
      android:gravity="center"/>

  </RelativeLayout>
</RelativeLayout>

Ответ 5

LinearLayout - хороший вариант. Помимо этого есть такие опции, как создание невидимого вида и центра, а затем выравнивание левой кнопки влево и справа от нее. НО они просто работают вокруг.