Ориентировочная схема Android для двух элементов
У меня есть относительный макет:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/single_row"
android:padding="12dip">
<ImageView
android:id="@+id/page_image"
android:layout_marginRight="6dip"
android:layout_width="66dip"
android:layout_height="66dip"
android:layout_alignParentLeft="true"
android:src="@drawable/no_photo" />
<TextView
android:id="@+id/page_name"
style="@style/pulse_content"
android:layout_alignTop="@id/page_image"
android:layout_toRightOf="@id/page_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/page_desc"
android:layout_below="@id/page_name"
style="@style/pulse_content"
android:layout_alignLeft="@id/page_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Principal Consultant" />
<Button
android:id="@+id/follow_button"
android:layout_below="@id/author_image"
android:layout_marginTop="15dip"
android:layout_alignParentBottom="true"
android:text="Follow"
style="@style/follow_button" />
</RelativeLayout>
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы follow_button был ниже как page_desc, так и page_image. Иногда содержимое page_desc будет иметь высоту, большую, чем размер изображения, иногда нет. проблема в том, что если я установил следующую строку ниже либо изображения, либо описания, то другой будет обрезаться. Есть ли эффективный/эффективный способ убедиться, что изображение или page_desc всегда видны и над кнопкой?
Ответы
Ответ 1
Здесь вы идете:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/single_row"
android:padding="12dip">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/page_image"
android:layout_marginRight="6dip"
android:layout_width="66dip"
android:layout_height="66dip"
android:layout_alignParentLeft="true"
android:src="@drawable/no_photo" />
<TextView
android:id="@+id/page_name"
style="@style/pulse_content"
android:layout_alignTop="@id/page_image"
android:layout_toRightOf="@id/page_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/page_desc"
android:layout_below="@id/page_name"
style="@style/pulse_content"
android:layout_alignLeft="@id/page_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Principal Consultant" />
</RelativeLayout>
<Button
android:id="@+id/follow_button"
android:layout_marginTop="15dip"
android:text="Follow"
style="@style/follow_button" />
</LinearLayout>
Ответ 2
Ответ здесь требует очень небольших изменений. У вас была большая часть вашего макета правильно, однако есть один вариант, который все испортил. AlignParentXXXX часто принимает "ложный" приоритет над параметрами LayoutXXXX. Итак, установив Button на AlignParentBottom, вы сообщаете RelativeLayout, что размер кнопки не вычисляется в размерном макете родителя.
Вы можете решить проблему, просто удалив AlignParent = "true" с вашей кнопки. Код результата приведен ниже и проверен. Полагаю, что это решение соответствует вашим желаниям.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/single_row"
android:padding="12dip">
<ImageView
android:id="@+id/page_image"
android:layout_marginRight="6dip"
android:layout_width="66dip"
android:layout_height="66dip"
android:layout_alignParentLeft="true"
android:src="@drawable/no_photo" />
<TextView
android:id="@+id/page_name"
style="@style/pulse_content"
android:layout_alignTop="@id/page_image"
android:layout_toRightOf="@id/page_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/page_desc"
android:layout_below="@id/page_name"
style="@style/pulse_content"
android:layout_alignLeft="@id/page_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Principal Consultant" />
<Button
android:id="@+id/follow_button"
android:layout_below="@id/author_image"
android:layout_marginTop="15dip"
android:text="Follow"
style="@style/follow_button" />
</RelativeLayout>
Я столкнулся со многими аналогичными проблемами с AlignParent, когда WrapContent был на родительском. Позиционирование Top и Bottoms создает нежелательное поведение, если оно не подготовлено к нему. В общем, я считаю, что лучше всего использовать только один или другой (если вообще) и выровнять остальные выше или ниже этого.
Ответ 3
Так как все взаимосвязано в RelativeLayout, это не имеет значения, какой порядок вы его размещаете, но имеет значение, если вы пытаетесь получить доступ к одному представлению до его создания. Например, использование атрибута android: layout_below не совсем то, что вы хотели для Button. Если вы установили другие виды android: layout_above, это сделало бы представления всегда выше.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/single_row"
android:padding="12dip">
<Button
android:id="@+id/follow_button"
android:layout_marginTop="15dip"
android:layout_alignParentBottom="true"
android:text="Follow"
style="@style/follow_button" />
<ImageView
android:id="@+id/page_image"
android:layout_above="@id/follow_button"
android:layout_marginRight="6dip"
android:layout_width="66dip"
android:layout_height="66dip"
android:layout_alignParentLeft="true"
android:src="@drawable/no_photo" />
<TextView
android:id="@+id/page_name"
android:layout_above="@id/follow_button"
style="@style/pulse_content"
android:layout_alignTop="@id/page_image"
android:layout_toRightOf="@id/page_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/page_desc"
android:layout_above="@id/follow_button"
android:layout_below="@id/page_name"
style="@style/pulse_content"
android:layout_alignLeft="@id/page_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Principal Consultant" />
</RelativeLayout>