RelativeLayout layout_centerInParent и layout_below проблема - PullRequest
2 голосов
/ 16 мая 2011

У меня проблема с разметкой относительного макета.Вот тестовый код

<RelativeLayout
    android:background="@drawable/bg_controls"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/controls_layout"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/controls_layout" />

</RelativeLayout>

В результате получается enter image description here

Если удалить android: layout_centerInParent = "true", все работает нормально.Почему RelativeLayout не может сделать это иначе?

UPD: ожидаемый результат - вторая кнопка появляется под LinearLayout.

Ответы [ 4 ]

1 голос
/ 11 июля 2016

Это происходит, когда относительный макет имеет высоту wrap_content.Если вы можете задать фиксированную высоту для относительного макета, layout_below элемент centerInParent работает нормально.В противном случае относительная компоновка предполагает положение первого элемента (в данном случае controls_layout) в обычной позиции (то есть без centerInparent) и выравнивает второй элемент под ним.


решения:

  1. Присвойте фиксированную высоту относительному макету вместо wrap_content или
  2. , удерживая две кнопки в линейном макете с вертикальной ориентацией, и присвойте centerInParent линейному макету
1 голос
/ 06 сентября 2014

У меня была очень похожая проблема, где у меня была центрированная View, которая была обозначена layout_centerInParent, и все мои другие виды были относительно этого, но некоторые из View не отображались должным образом в редактор или на устройстве.

Я обнаружил, что сам мой центрированный View, обозначенный layout_centerInParent, все еще должен был относиться к чему-то другому (настолько не интуитивно, как это звучит). Таким образом, я сделал это layout_below чем-то, что было поверх него, даже если это View поверх него не было выровнено ни с чем, кроме того, что layout_top того же самого ниже. Но как только я это сделал, весь интерфейс встал на свое место:)

0 голосов
/ 13 марта 2013

Вы пробовали запустить это на реальном устройстве?Я получил эту проблему при предварительном просмотре макета в Eclipse, но когда я запустил его на устройстве, он работал как задумано

0 голосов
/ 16 мая 2011

Используете ли вы API уровня 3 (1.5)?RelativeLayouts очень необычны для 1.5.Давать вашим кнопкам идентификатор - хорошая идея.

...