2015-11-17 5 views
1

В случае, если у меня есть 2 вида, и я хочу, чтобы вы заняли необходимое пространство, а другое, чтобы взять оставшееся пространство, как мне это сделать?Заполнить оставшееся пространство: LinearLayout и вес или RelativeLayout?

Предположим, я хочу, чтобы взгляды были вертикальными. В приведенном ниже представлении должно быть занято необходимое пространство (wrap_content), и вышеописанное представление должно занимать оставшееся пространство макета контейнера.

Я использовал эти 2 решения (упрощенный код):

1) LinearLayout с weight

<LinearLayout ...> 
    <View height="0dp" weight="1" .../> 
    <View height="wrap_content" .../> 
</LinearLayout> 

2) RelativeLayout с совместив

<RelativeLayout ...> 
    <View height="wrap_content" id="@+id/big" alignParentTop .../> 
    <View height="wrap_content" below="@+id/big" alignParentBottom .../> 
</RelativeLayout> 

LinearLayout подход всегда работает, и RelativeLayout обычно работает так, как ожидалось, но он явно неоднозначен, поскольку ничего ays, то вид @+id/big должен быть больше, чем показано ниже.

Я думаю, что первый подход лучше, так как не является двусмысленным. Тем не менее, я видел много примеров и ответов со вторым подходом.

Какое решение вы используете для этих случаев. Есть ли наилучшая практика?

Спасибо!

EDIT

Принимая ответ Touf «с, теперь я хотел бы сделать это (обратите внимание на match_parent):

<RelativeLayout ...> 
    <View height="match_parent" id="@+id/big" alignParentTop .../> 
    <View height="wrap_content" below="@+id/big" alignParentBottom .../> 
</RelativeLayout> 

ответ

3

Я хотел бы использовать относительную раскладку:

<View height="match_parent" id="@+id/big" android:layout_above="@+id/view2" alignParentTop ... > 

<View height="wrap_content" id="@+id/view2" alignParentBottom ...> 

Этот путь первое представление будет заполнять высоту экрана, пока оно не достигнет второго представления.

+0

Спасибо, имеет смысл, хотя я не знаю, почему андроид изменил «fill_parent» на «match_parent». Я имею в виду, что ваше решение будет совершенно понятным с помощью классификатора старого размера: «Заполните родителя столько, сколько сможете». Новый размер, кажется, говорит «соответствовать размеру родителя». –

+1

"fill_parent" и "match_parent" - то же самое. Ознакомьтесь с этими ссылками: http://stackoverflow.com/questions/10854717/why-did-match-parent-replace-fill-parent http://developer.android.com/reference/android/view/ViewGroup. LayoutParams.html – Touf

+0

Кстати, я думаю, мне нужно использовать только «выше» или «ниже»; использование обоих является избыточным, не так ли? Возможно, я должен использовать ниже, чтобы ссылаться на представление, которое было объявлено ранее, хотя я не уверен, могу ли я использовать прямые ссылки (ссылаясь на объявления, объявленные впоследствии в xml). –

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