Ответ 1
marginBottom
не действует, если вы установите android:layout_height="wrap_content"
для <RelativeLayout>
, вместо этого установите его как match_parent и проверьте.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/messageLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/messageSender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"/>
<TextView
android:id="@+id/messageSenderName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/messageSender"
android:ellipsize="end"
android:maxLines="1"
android:singleLine="false"
android:textColor="@color/list_text_color"
android:textSize="16dp"
android:layout_marginTop="5dp" />
<TextView
android:id="@+id/messageContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/messageSender"
android:layout_below="@id/messageSenderName"
android:ellipsize="end"
android:maxLines="1"
android:singleLine="false"
android:textColor="@color/codeFont"
android:textSize="13dp"/>
</RelativeLayout>
В моем макете у меня проблема. Когда я устанавливаю marginTop="5dp"
, это хорошо, но когда я использую marginBottom
, в моем макете ничего не происходит. Также, когда я устанавливаю дополнение в RelativeLayout
, он тоже не работает. В чем проблема? Не могли бы вы дать мне какое-либо решение?
marginBottom
не действует, если вы установите android:layout_height="wrap_content"
для <RelativeLayout>
, вместо этого установите его как match_parent и проверьте.
Это просто ошибка <RelativeLayout>
, поэтому вы можете попытаться обернуть RelativeLayout внутри <LinearLayout>
и установить там маржу.
Я не уверен, в какой версии Android вы столкнулись с этой проблемой. Я посмотрел RelativeLayout в Android 4.2.2 (https://android.googlesource.com/platform/frameworks/base/+/android-4.2.2_r1.1/core/java/android/widget/RelativeLayout.java), и я считаю, что в onMeasure есть ошибка.
В строках с 486 по 488 мы имеем следующий код:
if (isWrapContentHeight) {
height = Math.max(height, params.mBottom);
}
По моему мнению, вышесказанное должно гласить:
if (isWrapContentHeight) {
height = Math.max(height, params.mBottom + params.bottomMargin);
}
С андроидом: layout_height = "wrap_content", RelativeLayout не появляется, принимая во внимание нижний маркер последнего вертикально выложенного представления.
Я предлагаю вам попробовать одно из следующих:
*) Добавьте фиктивный вид, который будет самым последним вертикально выложенным представлением, и убедитесь, что он имеет атрибут android: layout_below. Обратите внимание, что фиктивный вид не имеет нижнего поля, он существует, поэтому RelativeLayout рассматривает нижний край представлений, выложенный над ним. Для вашего случая, фиктивный вид будет выглядеть так:
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_below="@id/messageSender"
/>
*) Как уже упоминалось, достичь такого же эффекта другими способами, например, Padding.
*) Не так-тривиальное решение включает RelativeLayout, его определения стиля платформы и классы управления пулами в ваш проект, выполняет исправление ошибок, упомянутое выше, и использую его везде, где вы обычно используете RelativeLayout.
*) Запишите ошибку в Google
Надеюсь, что это поможет.
Возможно, вы можете установить android:paddingBottom=""
of <RelativeLayout>
, чтобы получить тот же эффект.
Убедитесь, что layout_height
вашего корневого контейнера установлен на match_parent
вместо wrap_content
.
У меня был <View>
внутри <RelativeLayout>
а marginBottom
в этом представлении не работал. Я обнаружил, что моя цепочка layout_below
была разорвана, поэтому имеет смысл, чтобы макет не знал, из какого вида следует рассчитывать маржу.
Если вы layout_below
его правильно, используя layout_below
или другие инструменты позиционирования, вам не нужно беспокоиться о wrap_content
или match_parent
как предлагают другие. Пример:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginBottom="11dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/separator">
...
Он работает, если вы используете android:layout_marginBottom with android:layout_alignParentBottom="true"
.
Например:
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp">