Центрировать несколько элементов в RelativeLayout, не помещая их в контейнер?
У меня есть RelativeLayout, содержащий пару кнопок рядом друг с другом, которые я хочу, чтобы быть в центре макета. Я мог бы просто поместить кнопки в LinearLayout и расположить их по центру в 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>
5 ответов
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>
Вот продолжение ответа 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>
Вот комбинация приведенных выше ответов, которые разрешили мою конкретную ситуацию:
Центрирование двух отдельных меток в макете, который также включает кнопку в крайнем левом положении того же макета (кнопка, метка, метка, слева направо, где метки центрированы относительно макета, содержащего все три вида - то есть кнопка не сдвигает метки от центра).
Я решил эту проблему, вложив два RelativeLayout, где внешний макет включал в себя Button и Inner-RelativeLayout.
Inner-RelativeLayout содержал две текстовые метки (TextView's).
Вот фрагмент, который предоставляет детали того, как было выполнено центрирование и другие элементы макета:
см.: RelativeLayout Gravity не применяется? и Gravity и layout_gravity на Android для различия между гравитацией и layout_gravity.
Настройте paddingLeft на кнопку btn_button1, чтобы увидеть, что TextView не перемещаются.
(Приношу свои извинения, что у меня есть хз за отрицательные голоса. Я был слишком поспешен, думая, что просто б / у ваши предложения не решают точный вопрос, который задают, что они действительно помогают решать очень похожие ситуации (ответ здесь решает очень специфическую ситуацию и только комбинация всех этих ответов решила мою проблему. Я попытался проголосовать, но это не позволит мне, если я не отредактирую ответ, что я не хочу делать.)
<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>
LinearLayout
хороший вариант Помимо этого есть такие опции, как создать невидимый вид и центрировать его, а затем выровнять левую кнопку по левому краю и справа от него. НО это просто обходные пути.