Центрировать несколько элементов в 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>
Ответы
Ответ 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="<"
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
- хороший вариант. Помимо этого есть такие опции, как создание невидимого вида и центра, а затем выравнивание левой кнопки влево и справа от нее. НО они просто работают вокруг.