Вопрос

В моем приложении у меня есть 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>

Когда эти макеты пусты, нет проблем, они имеют хорошую пропорцию.

Проблема в том, что если я помещу небольшой listview в верхний макет, например, длятогда макет примет размер listview и не сохранит пропорцию 60/40%.

Я бы хотел, чтобы, даже если мой listview невелик (например, всего 3 элемента), макет сохранял его на 60%, и поэтому под моим listview было немного пустого пространства.

Я пытался измениться 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 укажите дополнительное пространство в макете для представления.сначала вам следует попробовать измерить свой экран следующим образом:

Display display = ((WindowManager) 
  getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = display.getHeight();

а затем выполните некоторые вычисления, такие как ширина * 0.6 и 0.4 , таким образом, ваш макет всегда будет иметь соотношение 60 на 40.

Надеюсь, это поможет

пробовать layout_height = 0dp у обоих детей LinearLayouts.Это происходит потому, что у вас есть wrap_content что, вероятно, переопределяет layout_weight эффект.

Просто в вашем родительском макете замените android:layout_weight="1.0" с android:weightSum="1.0"

Это работает путем установки суммы весов родительского макета и весов дочерних макетов.Вес детей должен быть равен сумме веса родителя.Взгляните на это http://blog.stylingandroid.com/archives/312

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top