Как создать фиксированное соотношение между галереей и WebView? - PullRequest
2 голосов
/ 06 августа 2011

У меня есть макет, который содержит WebView и галерею сверху.Я хотел бы дать галерею 20% экрана всегда.WebView должен всегда занимать 80%.

Обычно это работает с layout_weight во всех моих макетах, где более высокое значение - это меньшее представление, а 1 - самое большое представление.В этом макете это совершенно другое.Здесь мне нужно использовать более высокое значение для большего элемента, и оно не остается в фиксированном соотношении.

Любая помощь высоко ценится.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical" >

    <Gallery 
        android:id="@+id/gallery"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:spacing="2dip" />       

    <View
        android:background="@android:color/white"
        android:layout_height="1dip"
        android:layout_marginTop="6dip"
        android:layout_width="fill_parent" />

    <WebView
        android:id="@+id/webview"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:layout_width="fill_parent" />
</LinearLayout>

1 Ответ

1 голос
/ 06 августа 2011

Вес используется для распределения дополнительного пространства ПОСЛЕ учета любых установленных значений высоты / ширины. Для вертикального LinearLayout, если вы хотите обеспечить соотношение 20/80 (игнорируя разделитель), вы должны установить нулевую высоту (неважно, какая единица измерения) для компонентов. В противном случае Android сначала будет учитывать их высоту и распределять оставшееся пространство только в соотношении весов.

В качестве примера рассмотрим наличие контейнера (горизонтальный LinearLayout) шириной 100 пикселей и двух компонентов с весами 1, но с шириной 10 и 30 пикселей соответственно. Чтобы вычислить их размеры, мы сначала вычитаем ширину из размера контейнера: 100 - 10 - 30 = 60. Затем мы делим это на соотношение весов: 60 / (1 + 1) = 30 и распределяем каждую часть соответственно. Первый вид будет иметь ширину 10 + 30 = 40, тогда как второй вид будет иметь ширину 30 + 30 = 60, даже если они имели одинаковый вес.

Попробуйте следующий макет:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="vertical" >

<Gallery 
    android:id="@+id/gallery"
    android:layout_height="0px"
    android:layout_weight="1"
    android:layout_width="fill_parent"
    android:spacing="2dip" />       

<View
    android:background="@android:color/white"
    android:layout_height="1dip"
    android:layout_marginTop="6dip"
    android:layout_width="fill_parent" />

<WebView
    android:id="@+id/webview"
    android:layout_height="0px"
    android:layout_weight="5"
    android:layout_width="fill_parent" />
</LinearLayout>
...