GridView 自动调整图像

Posted

技术标签:

【中文标题】GridView 自动调整图像【英文标题】:GridView auto fit images 【发布时间】:2011-08-17 20:51:51 【问题描述】:

我试图让图像显示在 GridView 中并自动设置列,到目前为止,我不得不手动设置列数,这不是我想要做的,因为这会影响图像的大小不同尺寸的屏幕。我已经尝试将其设置为 auto_fit 但它仅在屏幕中间显示 2 列。这就是我想要实现的目标:(每个红色方块代表一个图像)

然后,当切换到横向模式时,我希望列自动适应,使其全部均匀。 任何帮助将不胜感激,谢谢:)

【问题讨论】:

【参考方案1】:

试验 GridView 属性,特别是 android:numColumns="auto_fit"android:stretchMode。以下对我有用:

<GridView 
    android:id="@+id/myGrid"
    android:layout_ 
    android:layout_
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"    
    android:gravity="center"
/>

【讨论】:

太棒了。我有 auto_fit,但缺少 columnWidth。在我添加之后,事情开始变得很好。 我什么都有,除了 columnWidth 参数,它是强制性的 2 列中的任何内容 我有完全相同的 XML,但 GridView 仍然只显示 2 列! @ΕГИІИО 如果您不指定 columnWidth,默认情况下您将获得 2 列,正如查看 GridView 的源代码会告诉您的那样。对于这些情况,您可以使用我的解决方案(在此处指定)。【参考方案2】:

更好的解决方案是以编程方式测量宽度,这样您就不会得到硬编码的列宽:

Android: How does GridView auto_fit find the number of columns?

【讨论】:

【参考方案3】:

我不确定为什么有人否决了我上面的答案(所以我再次投了赞成票):我必须以编程方式解决类似的问题(使用 ImageView 子项的 GridView)。为了清楚起见,删除了一些代码:

    int iDisplayWidth = getResources().getDisplayMetrics().widthPixels ;

    iImageWidth = iDisplayWidth
        / iNumberOfColumns ; 
    gridview.setColumnWidth( iImageWidth );
    gridview.setStretchMode( GridView.NO_STRETCH ) ;    
    /* wrap_content in the xml file is supposed to do this, but it didn't seem to work */

最好的问候,

皮西亚

【讨论】:

为什么在拉伸模式下 NO_STRETCH 比 STRETCH_COLUMN_WIDTH 更好?

以上是关于GridView 自动调整图像的主要内容,如果未能解决你的问题,请参考以下文章

如何调整gridview宽度

根据项目模板的大小动态调整gridview编辑模板的大小

如何在初始化后调整 GridView 列的宽度?

嵌套滚动视图自动滚动到底部

如何在 GridView 中显示 Firebase 存储图像

Android11.3 屏幕旋转和场景变换过程中GridView的呈现