В моем приложении у меня есть 2 линейных макета: один сверху, другой снизу.
Мне бы хотелось, чтобы все, что находится внутри этих макетов, макет верхней части занимал 60% высоты экрана, а макет нижней - 40%. Вот мой код XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.6"
android:orientation="vertical"
android:id="@+id/layout_top">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="0.4"
android:id="@+id/layout_bottom">
</LinearLayout>
</LinearLayout>
Когда эти макеты пусты, нет проблем, они имеют хорошую пропорцию.
Проблема заключается в том, что если я добавлю небольшой вид списка в верхний макет, например, тогда макет примет размер списка и не сохранит пропорцию 60/40%.
Я бы хотел, чтобы даже если мой список просмотра был маленьким (например, всего 3 элемента), макет сохранил его на 60% и поэтому оставил некоторое свободное пространство под моим списком.
Я пытался изменить android:layout_height
на match_parent
но это ничего не меняет.
Попробуйте использовать этот макет, он работает для меня
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="6"
android:orientation="vertical"
android:id="@+id/layout_top"
android:background="#FF0000">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="vertical"
android:layout_weight="4"
android:id="@+id/layout_bottom"
android:background="#FF00FF">
</LinearLayout>
</LinearLayout>
Фокус в том, чтобы установить layout_height="0dip"
вместо wrap_content в портретном режиме, а layout_with="0dip"
вместо wrap_content в ландшафтном режиме для этого вы можете использовать папку layout-land.
layout_weight определяет дополнительное пространство в layoutfot view. вы должны сначала попытаться измерить свой экран:
Display display = ((WindowManager)
getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getHeight();
а затем делать некоторые вычисления, такие как ширина * 0,6 и 0,4, таким образом, ваш макет всегда будет иметь отношение 60 40.
Надеюсь это поможет
Просто в макете вашего родителя замените android:layout_weight="1.0"
на android:weightSum="1.0"
Это работает, устанавливая весовую массу родительского макета и веса макетов детей. Вес детей должен быть равен весовой сумме родителя. Взгляните на это http://blog.stylingandroid.com/archives/312
попробуйте layout_height = 0dp
в обоих дочерних LinearLayouts
. Это происходит потому, что у вас есть wrap_content
который, вероятно, layout_weight
эффект layout_weight
.