【问题标题】:Android: How to change dynamically size of child views to fit parent view size?Android:如何动态更改子视图的大小以适应父视图的大小?
【发布时间】:2013-12-18 04:01:24
【问题描述】:

我有一个带有 3 或 4 个视图(按钮和图像按钮)的 LinearLayout,我希望它们都具有相同的大小以完全适合布局,如下图所示 水平和垂直都必须做同样的事情。

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)并将大小设置为内部子级,但它不起作用,因为我无法获得布局的实际尺寸。

【问题讨论】:

  • 您的布局中有多少视图?是3还是4?您可以简单地使用权重总和和 layout_weight 来完成。你是怎么试过的?如果没有我可以给你一个例子

标签: android layout views children


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果是垂直的

     <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" />
    

    【讨论】:

    • 是的,没错。这与我要建议的相同。如果有帮助,请采纳答案。
    • 啊,所以你在每个子视图中都使用权重,我明天早上试试,如果正确我一定会接受答案,谢谢!
    • 好的,我测试了它,当我知道布局中有多少视图时,它运行良好。
    • 问题是我不知道里面是否会有 3 个或 4 个按钮,因为一个设置为可见性 GONE 并且在运行时它可以变得可见.. 如果可以设置 weightsum在运行时它会很完美,现在我试着去做。不过谢谢你,我接受了你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多