Как заставить элемент заполнить то, что осталось от макета - PullRequest
0 голосов
/ 27 декабря 2010

Пока у меня есть этот код раскладки:

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

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

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="48dip"
        android:background="#FFFFFF" >

        <ImageView
            android:layout_weight="1"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:layout_gravity="center_vertical"
            android:src="@drawable/icon" />

        <TextView
            android:layout_weight="1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="text" />

        <TextView
            android:layout_weight="1"
            android:layout_width="40dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="text" />

    </LinearLayout>

</LinearLayout>

Что делают люди, когда у них есть такой макет, где средний TextView должен заполнить то, что осталось от макета? Здесь у меня есть ImageView шириной 40 dip и TextView шириной 40 dip. Поэтому я пытаюсь получить средний TextView, чтобы заполнить то, что осталось. Код выше, насколько я понимаю. Я получил средний TextView, чтобы заполнить то, что осталось, и некоторые дополнительные - оставив левый ImageView меньше 40dip, который я установил.

Что мне здесь делать? Макетирование в Android не так просто.

Я пытаюсь создать список, похожий на списки в Маркете. Со значком слева, двумя строками текста посередине и дополнительной информацией справа. Есть ли примеры, как это сделать?

1 Ответ

4 голосов
/ 27 декабря 2010

Я думаю, что следующий макет даст вам то, что вы хотите:

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

<TableRow android:layout_width="fill_parent">

    <ImageView android:src="@drawable/icon" />

    <TextView
        android:padding="3dip"
        android:gravity="left"
        android:text="Stretched text"
        />

    <TextView
        android:padding="3dip"
        android:gravity="left"
        android:text="LeftOver"
        />  
</TableRow>

Если вы хотите продолжить работу с LinearLayout, вам нужно использовать свойства гравитации. Следующее также даст вам то, что вы хотите:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="48dip"
    android:background="#dddddd" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:src="@drawable/icon" />

        <TextView
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Stretched Text" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:text="text" />

</LinearLayout>

Также ознакомьтесь с представлением - демонстрации API для нескольких примеров компоновки.

...