【问题标题】:How to prevent cells in GridLayout from stretching?如何防止 GridLayout 中的单元格拉伸?
【发布时间】:2014-03-23 22:36:27
【问题描述】:

我正在尝试使用 GridLayout 布局一些尺寸不均匀的图像(我正在尝试实现 StaggeredGrid ),但是当我将第一个图像放在第一个单元格中时,它会在整个屏幕上伸展。

如何防止它这样做?

<?xml version="1.0" encoding="UTF-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:columnCount="4"
   android:rowCount="4"
   tools:context=".MainActivity" >

<ImageView
    android:layout_columnSpan="1"
    android:layout_rowSpan="2"
    android:src="@drawable/pic1" />

<ImageView
    android:layout_columnSpan="2"
    android:layout_rowSpan="1"
    android:src="@drawable/pic2" />

</GridLayout>

谢谢,

Shmulik

【问题讨论】:

    标签: android android-gridlayout


    【解决方案1】:

    请使用 layout_column 和 layout_row 指定您希望在哪一行和哪一列中放置 ImageView。

    <?xml version="1.0" encoding="UTF-8"?>
    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="4"
        android:rowCount="4"
        tools:context=".MainActivity" >
    
     <ImageView
       android:layout_column="1"
       android:layout_row="0"
       android:src="@drawable/pic1" />
    
     <ImageView
       android:layout_column="2"
       android:layout_row="0"
       android:src="@drawable/pic2" />
    
    </GridLayout>
    

    还阅读了文档,我发现我们可以使用 Gravity 来控制拉伸。它说,

    多余空间分布

    GridLayout 对多余空间的分配是基于优先级而不是权重。孩子的拉伸能力是从其行组和列组的对齐属性推断出来的(通常通过设置孩子的布局参数的重力属性来设置)。如果沿给定轴定义对齐,则组件在该方向上被视为灵活。如果没有设置对齐,则假定组件是不灵活的。

    同一行或列组中的多个组件被视为并行操作。只有当其中的所有组件都是灵活的时,这样的组才是灵活的。相反,位于公共边界两侧的行组和列组被视为串联。如果其中一个元素是灵活的,那么由这两个元素组成的复合组是灵活的。

    要使柱子伸展,请确保其中的所有组件都定义了重力。为防止列拉伸,请确保列中的某个组件未定义重力。

    在单元组中的组件周围放置等量的空间;使用CENTER 对齐(或重力)。用于完全控制行或列中多余的空间分布;使用LinearLayout 子视图来保存相关单元组中的组件。使用这些技术中的任何一种时,请记住,单元组可能被定义为重叠。

    【讨论】:

    • 感谢您的回复,但它仍然覆盖了整个屏幕。
    • 您还必须将 ImageViews 的 layout_width 和 layout_height 指定为 wrap_content 或所需的大小。并检查图像的大小。让它们足够小,你需要出现
    • 但是我失去了使用网格的概念......那为什么不直接使用 RelativeLayout 呢?有没有办法可以将屏幕分成不同大小的几块,并在每块中放一张图像,以便将比例保存在不同的设备上?
    • 您能否确认您的图像不是大到足以占据屏幕,因为使用 GridLayout 我们只给出行和列,但没有对其施加任何限制。所以如果图像非常大,它会扩散到它的大小。
    • 请我编辑。也看看 - stackoverflow.com/questions/10347846/…
    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2018-01-22
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多