LinearLayout остается шириной 0 (несмотря на явную установку или неявно с весами) - PullRequest
1 голос
/ 05 мая 2011

При использовании приведенного ниже макета (часть более крупного макета) видимость макета контейнера устанавливается на «пропал», пока не будет нажата кнопка. При нажатии кнопки, если container_ll не отображается, он устанавливается на видимое значение, и пользовательское представление добавляется к контейнеру напоминания Views_ll.

Представления добавляются, и представление container_ll отображается при нажатии кнопки. Далее следует ширина и высота различных видов после нажатия кнопки.

container_ll         width 420, height 96.  
lineDivider_view     width 420, height 2 (as expected)  
reminder_img         width 36, height 36 (as expected, hdpi phone)  
reminderViews_ll     width 0, height 96 (argh)


<LinearLayout
    android:id="@+id/container_ll"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:visibility="gone"                   
    >

    <View style="@style/lineDivider_view" />

    <ImageView
        android:id="@+id/reminder_img"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_gravity="center_horizontal"  
        />

    <!-- Stick the actual Reminder TVs + Del buttons in here dynamically -->
    <LinearLayout
        android:id="@+id/reminderViews_ll"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        />                  
</LinearLayout>

Я немного растерялся относительно того, куда идти отсюда. Я думал об аннулировании макета, чтобы заставить его снова рисовать после того, как представление стало видимым, но это никогда не работало для меня (по-видимому), и если воспоминаниеViews_ll может получить высоту 96, то это не может быть проблемой, когда он Расчет размеров LinearLayout.

Надеюсь, вам понравилось читать этот вопрос так же, как и я. Любые указатели, как всегда, оценены.

Ответы [ 3 ]

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

Показанные вами цифры выглядят правильно для меня.

Контейнер имеет ширину 420. Другие представления, для которых установлено fill_parent или wrap_content, занимают все пространство (фактически больше). Линейный макет затем разделит оставшееся пространство на любые взвешенные виды. Поскольку нет места для размещения, вы получаете ноль.

container_ll         width 420  
lineDivider_view      - 420  
reminder_img          - 36 
      =               -36

so this makes sense
reminderViews_ll     width 0

Там просто нет места, чтобы дать это.

Почему вы используете горизонтальный разделитель линий в горизонтальном представлении?

0 голосов
/ 05 мая 2011

Я вижу, что вы установили android:layout_width для reminderViews_ll на 0 дп, вы должны изменить этот параметр, возможно, динамически, если хотите. Я не очень понимаю, почему вы устанавливаете его на 0 дп, а затем спрашиваете, почему он имеет нулевую ширину.

0 голосов
/ 05 мая 2011

Ах, очень запутано: layout_width = "fill_parent" и layout_weight = "1.0" не работает?

Я имею в виду, что layout_width = "0dp" будет гарантированно равным ширине 0, независимо от того, что вы в него вставите, так что никто никогда не будет делать то, что вы хотите.Если вы используете fill_parent, и он все еще не работает, я бы задал вопрос, добавляете ли вы свой собственный вид в правильный LinearLayout, потому что это действительно должно работать правильно.

...