Как сделать так, чтобы представление заполнило пространство, доступное для него? - PullRequest
10 голосов
/ 19 июля 2011

Я знаю, что это должен быть простой вопрос ... Я просто не знаю, как это исправить.

Итак (только пример),

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:orientation="vertical">
    <Button     android:id="@+id/fakeButton"
                android:layout_height="match_parent"
                android:layout_width="match_parent"/>
    <Button     android:id="@+id/saveSearch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/saveSearch"/>
</LinearLayout>

Это не сработает - первая кнопка сделает 2-ю невидимой. Веса сделали бы все это игрой в процентах, а это не то, что я хочу.

Я толстый?

РЕДАКТИРОВАТЬ: Я не знал, но, похоже, порядок важен (из ответов). Загрузка макета скорее итеративная, чем целостная. Вы можете сделать первый элемент фиксированной высотой, а остальные элементы будут заполнять то, что осталось. НО мне нужно сделать конечный элемент фиксированной высоты.

Ответы [ 5 ]

11 голосов
/ 19 июля 2011

Вы можете использовать layout_weight именно для этого:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:orientation="vertical">
    <Button     android:id="@+id/fakeButton"
                android:layout_height="1"
                android:layout_width="match_parent"
                android:layout_weight="1.0" />
    <Button     android:id="@+id/saveSearch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/saveSearch"/>
</LinearLayout>

При этом нижняя кнопка будет иметь базовую высоту, а fakeButton займет все оставшееся пространство.

layout_height контролирует, как оставшееся пространство должно быть разделено между различными представлениями.Значение по умолчанию 0 (не занимает лишних пробелов).Если вы поместите обе кнопки на одинаковую высоту и вес 1,0, то каждая кнопка займет 50% пространства.

2 голосов
/ 21 июля 2011

Другое, довольно простое решение.Просто используйте FrameLayout и свойство margin:

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

    <Button     android:id="@+id/fakeButton"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent"
                android:text="Fake button"
                android:layout_marginBottom="50dip" />

    <Button     android:id="@+id/saveSearch"
                android:layout_gravity="bottom"
                android:layout_width="fill_parent"
                android:layout_height="50dip"
                android:text="Save search"/>
</FrameLayout>
2 голосов
/ 19 июля 2011

Я думаю, вы хотите заставить fakeButton заполнить оставшееся пространство, верно?Вы можете использовать android:layout_weight для этого.Вот пример:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:orientation="vertical">
<Button     android:id="@+id/fakeButton"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"/>
<Button     android:id="@+id/saveSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/saveSearch"/>
</LinearLayout>
0 голосов
/ 19 июля 2011

Я думаю, что это поможет вам ..

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="center"
android:background="@drawable/bg"
 >

 <Button
 android:id="@+id/button"
 android:layout_width="wrap_content"
 android:layout_height="60dip"
 android:text="button"

/>
<Button
 android:id="@+id/button1"
 android:layout_width="wrap_content"
 android:layout_height="fill_parent"
 android:layout_weight="1"
 android:layout_below="@+id/button"
 android:text="button1"

/>


</RelativeLayout>
0 голосов
/ 19 июля 2011

Должен быть другой путь.
сначала у вас должен быть фиксированный элемент, а затем match_parent или fill_parent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...