Неравномерное распределение веса LinearLayout - PullRequest
4 голосов
/ 25 мая 2011

У меня есть LinearLayout, который имеет четыре вида, расположенных горизонтально.Первый и последний компонент имеют заданный размер.Для внутренних двух представлений я хочу просто поделиться доступным пространством 50:50.Я установил для каждого из них вес «1», но при разметке представлений их размеры различаются в зависимости от содержимого, которое они содержат.Screen shot of the layout. The data is hidden but it shows how offset the views are

Вот мой макет XML для справки.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
    <ImageView 
        android:id="@+id/status" 
        android:src="@drawable/white"
        android:paddingRight="10dip" 
        android:layout_height="35dip" 
        android:layout_width="35dip">
    </ImageView>
    <TextView android:id="@+id/name" 
        android:text="Name" 
        android:layout_height="fill_parent" 
        android:layout_toRightOf="@id/status" 
        android:layout_width="wrap_content" 
        android:layout_weight="1" 
        android:textSize="25dip">
    </TextView>
    <TextView android:id="@+id/description"
        android:text="Description"
        android:layout_toRightOf="@id/name" 
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:textSize="25dip">
    </TextView>
    <TextView android:id="@+id/time" 
        android:text="Time" 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent"
        android:layout_toRightOf="@id/description" 
        android:textSize="25dip">
    </TextView>
</LinearLayout>

Очевидно, что это не настоящие имена столбцов, но я изменил их в целях конфиденциальности.Этот макет используется ListView, который изменяет текст каждого представления на любое значение, представленное им.Поля имени и описания должны быть выровнены, поскольку им обоим дано 50% оставшегося экрана, но когда имя длиннее, описание смещается вправо.Почему?

Ответы [ 2 ]

10 голосов
/ 25 мая 2011

Для учета веса размер макета должен быть 0 (ноль)

<TextView android:id="@+id/name" 
    android:text="Name" 
    android:layout_height="fill_parent"  
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:textSize="25dip">
</TextView>

Я также рекомендую увеличить ваш вес до 1 (и использовать дроби) или до 100.

Таким образом, вместо 1 вы бы использовали 50 или .5 для каждого просмотра. Код LinearLayout будет работать правильно с любой весовой суммой, но он становится трудным, если вы хотите позже изменить свое представление с помощью дополнительных разделов.

Также, если вы не используете относительное расположение, избавьтесь от атрибутов toRightOf. Меньше значит больше.

1 голос
/ 25 мая 2011

Попробуйте использовать android:layout_width="fill_parent" вместо "wrap_content" во всех дочерних элементах LinearLayout. Или еще лучше, сделайте такую ​​структуру в вашем xml:

<RelativeLayout>
    <ImageView />       # status, fixed width, alignParentLeft="true"
    <TextView />        # time, fixed width, alignParentRight="true"
    <LinearLayout>      # layout_width="fill_parent", toLeftOf="time" toRightOf="status"
        <TextView />    # name, use layout_weight="1"
        <TextView />    # description, use layout_weight="1"
    </LinearLayout>
</RelativeLayout>

Это должно делать то, что вы хотите. Использование LinearLayout вместо RelativeLayout тоже может сработать, но вам придется немного поэкспериментировать (я думаю, что использование вложенного макета, как в моем примере, подойдет).

...