2012-04-24 2 views
0

Я должны расположить вид А сверху вид B и B на вершине зрения С.Android много альтернатив для относительной позиции/стек

Has вести себя как стек по изменению видимости (ушли) или удаление элемента. Если я удаляю B, A должен быть на вершине C, если я удаляю C, B идет в нижней части родителя, а A держится выше B, если я удаляю B и C, A идет в нижней части родителя.

enter image description here

В настоящее время у меня есть это атрибуты:

C:

android:id="@+id/C" 
android:layout_alignParentBottom="true" 

B:

android:id="@+id/B" 
android:layout_above="@id/C" 
android:layout_alignWithParentIfMissing="true" 

A:

android:layout_above="@id/B" 
android:layout_alignWithParentIfMissing="true" 

Но мне нужно что-то вроде «если есть B, выровняйте над ним, если нет, выровняйте сверху C, если не выровняете нижнюю часть родителя».

Есть ли способ решить эту проблему в XML wihout вложенных макетах?

+0

ваша проблема решена? –

+0

Не совсем, см. Мой последний комментарий в ответе RorolePro. – Ixx

ответ

1

Что вы можете сделать, вместо того, чтобы использовать RelativeLayout, чтобы использовать LinearLayout с четвертым видом с layout_weight равным 1.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <View 
     android:id="@+id/spacer" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="#000000" /> 

    <View 
     android:id="@+id/A" 
     android:layout_width="fill_parent" 
     android:layout_height="30dip" 
     android:background="#FF0000" /> 

    <View 
     android:id="@+id/B" 
     android:layout_width="fill_parent" 
     android:layout_height="30dip" 
     android:background="#00FF00" /> 

    <View 
     android:id="@+id/C" 
     android:layout_width="fill_parent" 
     android:layout_height="30dip" 
     android:background="#0000FF" /> 

</LinearLayout> 
+0

вместо четвертого вида вы можете поместить свой linearlayout в relativelayout с alignParentBottom = "true" – njzk2

+0

@ njzk2: Согласен. То же, что и ответ выше, но удалите представление «Spacer», сделайте линейный макет alignParentBottom = «true» и установите layout_height LinearLayout в WRAP_CONTENT – Gophermofur

+0

. Для повышения производительности лучше увеличить представление иерархии по горизонтали, чем вертикально, поэтому Я предлагаю это решение, но ваше решение тоже работает. –

Смежные вопросы