【问题标题】:How to constrain the GridLayout's width to be less than the parent's width?如何将 GridLayout 的宽度限制为小于父级的宽度?
【发布时间】:2015-07-08 03:56:05
【问题描述】:

我在 XML 布局文件中定义了一个 GridLayout:

    <GridLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="4"
    android:useDefaultMargins="true" >

    <Button android:text="ababababababababababababababababababababab" />
    <Button android:text="ababababababababababababababababababababab" />
    <Button android:text="ababababababababababababababababababababab" />
    </GridLayout>

因为宽度是match_parent,所以我希望 GridLayout 安排按钮,以便每行只显示尽可能多的按钮,以保持行的宽度小于父级的宽度。

但是,这不是我看到的结果。三个按钮都显示在超出父级宽度的第一行,如下图所示。实现我想要的输出的方法是什么?

【问题讨论】:

    标签: android layout grid-layout


    【解决方案1】:

    GridLayout 是必需的吗?改用LinearLayout 并赋予每个视图相同的权重怎么样?

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">
    
                        <Button
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:text="ababababababababababababababababababababab" />
    
                        <Button
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:text="ababababababababababababababababababababab" />
    
                        <Button
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:text="ababababababababababababababababababababab" />
                    </LinearLayout>
    

    或将GridLayout 替换为TableLayout 并将您的按钮包装到TableRow 中,如下所示:

                <TableLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                    <TableRow>
                        <Button android:text="ababababababababababababababababababababab" />
                        <Button android:text="ababababababababababababababababababababab" />
                        <Button android:text="ababababababababababababababababababababab" />
                    </TableRow>
                </TableLayout>
    

    【讨论】:

    • GridLayout 承诺如果一行中没有剩余空间,则将子视图重新排列到各行中。我有一个动态生成的视图列表,我想在网格中显示这些视图。我不认为这两个选项会得到这个结果。
    • 那你不应该使用GridView吗?
    • GridView 不提供在特定列中具有不同宽度的灵活性
    • 您可以将按钮包裹在布局中并在该布局/列中调整按钮的宽度。
    • :) 当您想让按钮小于一列时,这将有所帮助。如果您希望按钮跨越两列或更多列怎么办?
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 2017-03-11
    • 2023-02-14
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多