Не удается получить правильный макет с «fill_parent» - PullRequest
9 голосов
/ 10 марта 2011

Я пытаюсь создать этот простой макет в Android.

enter image description here

A следует обернуть в соответствии с его содержимым и выровнять left|center_vertical.

B должен расширяться как можно больше, заполняя все пустое пространство.

C должен быть выровнен по правому краю, обернут для заполнения его содержимого и также выровнен center_vertical

Вот мой макет:

<?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="horizontal"
        android:gravity="left|center_vertical">
    <!-- A -->
    <ImageView android:id="@+id/example_item_icon"
            android:layout_width="48px"
            android:layout_height="48px"/>
    <!-- B -->
    <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:gravity="left|center_vertical"
             android:padding="5px">

        <TextView android:id="@+id/example_item_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"/>

        <TextView android:id="@+id/example_item_level_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold|italic"
                android:lines="1"
                android:textSize="10px"/>
    </LinearLayout>
    <!-- C -->
    <TextView android:id="@+id/example_item_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="14px"/>
</LinearLayout>

В этом макете C выталкивается за пределы экрана. Как я могу заставить этот макет работать?

Ответы [ 4 ]

19 голосов
/ 10 марта 2011

fill_parent означает «быть таким же большим, как родитель», а не «использовать оставшееся пустое место».Вместо fill_parent просто используйте android: layout_width = "0dip" и android: layout_weight = "1".

2 голосов
/ 10 марта 2011

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

edit: здесь с очищенными опечатками (и проверено как работающее)

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<TextView
    android:id="@+id/left"
    android:text="left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" />
<TextView
    android:id="@+id/right"
    android:text="right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true" />
<TextView
    android:id="@+id/middle"
    android:text="middle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/right"
    android:layout_toRightOf="@id/left" />
</RelativeLayout>
0 голосов
/ 10 марта 2011

Вот мой ответ.Я просто установил layout_weight на B равным 1.Очевидно, layout_weight - это что-то вроде процентного подхода.Я не знаю, как это работает, но вот мой готовый продукт, отлично выглядящий:

<?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="horizontal"
        android:gravity="left|center_vertical">

    <ImageView android:id="@+id/example_item_icon"
            android:layout_width="48px"
            android:layout_height="48px"/>

    <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:gravity="left|center_vertical"
             android:layout_weight="1"
             android:padding="5px">

        <TextView android:id="@+id/example_item_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"/>

        <TextView android:id="@+id/example_item_level_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold|italic"
                android:lines="1"
                android:textSize="10px"/>
    </LinearLayout>

    <TextView android:id="@+id/example_item_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="14px"/>
</LinearLayout>
0 голосов
/ 10 марта 2011

Попробуй это.Я заменил ImageViews на TextViews, чтобы легче показываться в редакторе XML.Обратите внимание, что я сохранил ширину 48 пикселей на «А», что, на мой взгляд, не очень-то важно.Замените его на wrap_content.

<?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="horizontal"
        android:gravity="center_vertical">

    <!-- A -->
    <TextView android:layout_height="48px"
    android:id="@+id/example_item_count_text2"
    android:textSize="14px"
    android:layout_weight="1"
    android:text="this is item a"
    android:textStyle="bold"
    android:layout_width="48px">
    </TextView>

    <!-- B -->
    <LinearLayout android:orientation="vertical"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:gravity="center_vertical"
             android:layout_weight="1"
             android:padding="5px">

        <TextView android:id="@+id/example_item_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="this is B"
                android:textStyle="bold"/>

        <TextView android:id="@+id/example_item_level_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="this should be underneath B"
                >
    </LinearLayout>

    <!-- C -->
    <TextView android:id="@+id/example_item_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="this is item c"
            android:layout_weight="1"
            android:textStyle="bold"
            android:textSize="14px"/>
</LinearLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...