Android:如何动态更改子视图的大小以适合父视图大小?

时间:2013-12-02 12:29:48

标签: android layout views children

我有一个内部有3或4个视图(Buttons和ImageButtons)的LinearLayout,我希望它们都具有相同的大小以完全适合布局,如下图example所示  同样的事情必须在水平和垂直方向完成。

LinearLayout的xml是这样的:

 <LinearLayout
    android:id="@+id/discover_right_action_bar"
    android:layout_width="64dp"
    android:layout_height="match_parent"
    android:layout_alignParentRight="true"
    android:layout_below="@id/top_navi_bar"
    android:background="@color/smart_dark_grey"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingBottom="5dp"
    android:paddingTop="5dp" >

    <ImageButton
        android:id="@+id/home_ib_friend"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:saveEnabled="false"
        android:scaleType="center"
        android:src="@drawable/ic_action_select_all" />

    <ImageButton
        android:id="@+id/home_ib_camera"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:saveEnabled="false"
        android:scaleType="center"
        android:src="@drawable/ic_action_camera" />

    <ImageButton
        android:id="@+id/ib_prof_mon_meetings"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:saveEnabled="false"
        android:scaleType="centerInside"
        android:src="@drawable/clock" />
</LinearLayout>

现在我只能在dp中手动设置或调整大小,或者将其设置为wrap_content,而不是在布局的开头和结尾处有空格。

我尝试过layout_weight属性,但我不知道如何使用它。

我也尝试过获取布局的实际大小(通过ViewTreeObserver)并将大小设置为内部子项,但它不起作用,因为我无法获得布局的真实尺寸。

2 个答案:

答案 0 :(得分:3)

如果是垂直的

 <LinearLayout
android:id="@+id/discover_right_action_bar"
android:layout_width="64dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:weightSum="3"
android:layout_below="@id/top_navi_bar"
android:background="@color/smart_dark_grey"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >

<ImageButton
    android:id="@+id/home_ib_friend"
    android:layout_width="60dp"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:saveEnabled="false"
    android:scaleType="center"
    android:src="@drawable/ic_action_select_all" />

<ImageButton
    android:id="@+id/home_ib_camera"
    android:layout_width="60dp"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:saveEnabled="false"
    android:scaleType="center"
    android:src="@drawable/ic_action_camera" />

<ImageButton
    android:id="@+id/ib_prof_mon_meetings"
    android:layout_width="60dp"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:saveEnabled="false"
    android:scaleType="centerInside"
    android:src="@drawable/clock" />

如果是横向的:

 <LinearLayout
android:id="@+id/discover_right_action_bar"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_alignParentRight="true"
android:weightSum="3"
android:layout_below="@id/top_navi_bar"
android:background="@color/smart_dark_grey"
android:gravity="center"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingTop="5dp" >

<ImageButton
    android:id="@+id/home_ib_friend"
    android:layout_width="0dp"
    android:layout_height="60dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:saveEnabled="false"
    android:scaleType="center"
    android:src="@drawable/ic_action_select_all" />

<ImageButton
    android:id="@+id/home_ib_camera"
    android:layout_width="0dp"
    android:layout_height="60dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:saveEnabled="false"
    android:scaleType="center"
    android:src="@drawable/ic_action_camera" />

<ImageButton
    android:id="@+id/ib_prof_mon_meetings"
    android:layout_width="0dp"
    android:layout_height="60dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:saveEnabled="false"
    android:scaleType="centerInside"
    android:src="@drawable/clock" />

答案 1 :(得分:0)

我解决了我的问题:上面的解决方案正在运行但我删除了weightSum属性,如果您不知道有多少子视图,它就可以工作。它们的大小将在动态和自动调整,以适应整个父母布局。