LinearLayout保持宽度为0(尽管明确设置,或隐式使用权重)

时间:2011-05-04 21:40:11

标签: android layout android-layout

使用以下布局(较大布局的一部分),容器布局的可见性将设置为“已消失”,直到单击按钮为止。在按钮上单击,如果container_ll不可见,则将其设置为visible,并将自定义视图添加到reminderViews_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>

从这里开始,我有点不知所措。我正在考虑使布局无效,强制它在使视图可见后再次绘制,但这对我来说似乎没有用(看似),如果reminderViews_ll可以达到96的高度,那么它不会成为什么时候它的问题计算LinearLayout的尺寸。

我希望你喜欢和我写这个问题一样阅读这个问题。任何指针,一如既往地赞赏。

3 个答案:

答案 0 :(得分:1)

您显示的数字对我来说是正确的。

容器宽度为420.设置为fill_parent或wrap_content的其他视图会占用所有空间(实际上更多)。然后,线性布局将剩余空间划分为任何加权视图。由于没有可分配的空间,因此您将获得零。

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

so this makes sense
reminderViews_ll     width 0

根本没有空间给它。

为什么在水平视图中使用水平线分割器?

答案 1 :(得分:0)

啊,非常困惑:layout_width =“fill_parent”和layout_weight =“1.0”不起作用?

我的意思是,layout_width =“0dp”保证宽度为0,无论你放入什么,所以你永远不会做你想要的。如果您正在使用fill_parent并且它仍然无法正常工作,我会问您是否将自定义视图添加到正确的LinearLayout中,因为这确实应该可以正常工作。

答案 2 :(得分:0)

我看到您已为android:layout_width设置reminderViews_ll为0 dp,您必须更改此参数,如果您愿意,可能会动态更改此参数。我真的不明白为什么你把它设置为0 dp然后问为什么它的宽度为零。